Commit e625cbd9 authored by Alessandro Rubini's avatar Alessandro Rubini

Run ./scripts/Lindent on all .c and .h files

This is massive: 4k lines changed (but only 840 if you ignore
space-only changes).  In this case "git blame -w" won't always find
the right patch, and it may fall on this patch -- because those
800 lines changed in content too.

This has been done with

   find . -name '*.[ch]' | xargs -n 1 ./scripts/Lindent

Statistics: all changes and ignoring blank space:

   morgana% git diff --stat HEAD~1 | tail -1
    77 files changed, 3774 insertions(+), 3709 deletions(-)
   morgana% git diff -w --stat HEAD~1 | tail -1
    61 files changed, 894 insertions(+), 829 deletions(-)

However, after this step I hand-fixed some very ugly long expressions
(leaving them long: no content change at all is there).
Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 1d24ecfb
...@@ -6,34 +6,32 @@ void disable_irq() ...@@ -6,34 +6,32 @@ void disable_irq()
unsigned int Mask = ~1; unsigned int Mask = ~1;
/* disable peripheral interrupts in case they were enabled */ /* disable peripheral interrupts in case they were enabled */
asm volatile ("rcsr %0,ie":"=r"(ie)); asm volatile ("rcsr %0,ie":"=r" (ie));
ie &= (~0x1); ie &= (~0x1);
asm volatile ("wcsr ie, %0"::"r"(ie)); asm volatile ("wcsr ie, %0"::"r" (ie));
/* disable mask-bit in im */ /* disable mask-bit in im */
asm volatile ("rcsr %0, im":"=r"(im)); asm volatile ("rcsr %0, im":"=r" (im));
im &= Mask; im &= Mask;
asm volatile ("wcsr im, %0"::"r"(im)); asm volatile ("wcsr im, %0"::"r" (im));
} }
void enable_irq() void enable_irq()
{ {
unsigned int ie, im; unsigned int ie, im;
unsigned int Mask = 1; unsigned int Mask = 1;
/* disable peripheral interrupts in-case they were enabled */
/* disable peripheral interrupts in-case they were enabled*/ asm volatile ("rcsr %0,ie":"=r" (ie));
asm volatile ("rcsr %0,ie":"=r"(ie));
ie &= (~0x1); ie &= (~0x1);
asm volatile ("wcsr ie, %0"::"r"(ie)); asm volatile ("wcsr ie, %0"::"r" (ie));
/* enable mask-bit in im */ /* enable mask-bit in im */
asm volatile ("rcsr %0, im":"=r"(im)); asm volatile ("rcsr %0, im":"=r" (im));
im |= Mask; im |= Mask;
asm volatile ("wcsr im, %0"::"r"(im)); asm volatile ("wcsr im, %0"::"r" (im));
ie |= 0x1; ie |= 0x1;
asm volatile ("wcsr ie, %0"::"r"(ie)); asm volatile ("wcsr ie, %0"::"r" (ie));
} }
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#define DNA_SHIFT 3 #define DNA_SHIFT 3
#define DNA_READ 2 #define DNA_READ 2
void dna_read(uint32_t *lo, uint32_t *hi) void dna_read(uint32_t * lo, uint32_t * hi)
{ {
uint64_t dna = 0; uint64_t dna = 0;
int i; int i;
...@@ -23,7 +23,8 @@ void dna_read(uint32_t *lo, uint32_t *hi) ...@@ -23,7 +23,8 @@ void dna_read(uint32_t *lo, uint32_t *hi)
delay(10); delay(10);
gpio_out(DNA_CLK, 1); gpio_out(DNA_CLK, 1);
delay(10); delay(10);
if(gpio_in(DNA_DATA)) dna |= 1; if (gpio_in(DNA_DATA))
dna |= 1;
delay(10); delay(10);
gpio_out(DNA_CLK, 0); gpio_out(DNA_CLK, 0);
delay(10); delay(10);
...@@ -31,15 +32,14 @@ void dna_read(uint32_t *lo, uint32_t *hi) ...@@ -31,15 +32,14 @@ void dna_read(uint32_t *lo, uint32_t *hi)
gpio_out(DNA_SHIFT, 1); gpio_out(DNA_SHIFT, 1);
delay(10); delay(10);
for (i = 0; i < 57; i++) {
for(i=0;i<57;i++)
{
dna <<= 1; dna <<= 1;
delay(10); delay(10);
delay(10); delay(10);
gpio_out(DNA_CLK, 1); gpio_out(DNA_CLK, 1);
delay(10); delay(10);
if(gpio_in(DNA_DATA)) dna |= 1; if (gpio_in(DNA_DATA))
dna |= 1;
delay(10); delay(10);
gpio_out(DNA_CLK, 0); gpio_out(DNA_CLK, 0);
delay(10); delay(10);
......
This diff is collapsed.
...@@ -18,7 +18,6 @@ LGPL 2.1 ...@@ -18,7 +18,6 @@ LGPL 2.1
#include <hw/endpoint_regs.h> #include <hw/endpoint_regs.h>
#include <hw/endpoint_mdio.h> #include <hw/endpoint_mdio.h>
/* Length of a single bit on the gigabit serial link in picoseconds. Used for calculating deltaRx/deltaTx /* Length of a single bit on the gigabit serial link in picoseconds. Used for calculating deltaRx/deltaTx
from the serdes bitslip value */ from the serdes bitslip value */
#define PICOS_PER_SERIAL_BIT 800 #define PICOS_PER_SERIAL_BIT 800
...@@ -34,7 +33,7 @@ volatile struct EP_WB *EP; ...@@ -34,7 +33,7 @@ volatile struct EP_WB *EP;
uint16_t pcs_read(int location) uint16_t pcs_read(int location)
{ {
EP->MDIO_CR = EP_MDIO_CR_ADDR_W(location >> 2); EP->MDIO_CR = EP_MDIO_CR_ADDR_W(location >> 2);
while ((EP->MDIO_ASR & EP_MDIO_ASR_READY) == 0); while ((EP->MDIO_ASR & EP_MDIO_ASR_READY) == 0) ;
return EP_MDIO_ASR_RDATA_R(EP->MDIO_ASR) & 0xffff; return EP_MDIO_ASR_RDATA_R(EP->MDIO_ASR) & 0xffff;
} }
...@@ -44,19 +43,19 @@ void pcs_write(int location, int value) ...@@ -44,19 +43,19 @@ void pcs_write(int location, int value)
| EP_MDIO_CR_DATA_W(value) | EP_MDIO_CR_DATA_W(value)
| EP_MDIO_CR_RW; | EP_MDIO_CR_RW;
while ((EP->MDIO_ASR & EP_MDIO_ASR_READY) == 0); while ((EP->MDIO_ASR & EP_MDIO_ASR_READY) == 0) ;
} }
/* MAC address setting */ /* MAC address setting */
void set_mac_addr(uint8_t dev_addr[]) void set_mac_addr(uint8_t dev_addr[])
{ {
EP->MACL = ((uint32_t)dev_addr[2] << 24) EP->MACL = ((uint32_t) dev_addr[2] << 24)
| ((uint32_t)dev_addr[3] << 16) | ((uint32_t) dev_addr[3] << 16)
| ((uint32_t)dev_addr[4] << 8) | ((uint32_t) dev_addr[4] << 8)
| ((uint32_t)dev_addr[5]); | ((uint32_t) dev_addr[5]);
EP->MACH = ((uint32_t)dev_addr[0] << 8) EP->MACH = ((uint32_t) dev_addr[0] << 8)
| ((uint32_t)dev_addr[1]); | ((uint32_t) dev_addr[1]);
} }
void get_mac_addr(uint8_t dev_addr[]) void get_mac_addr(uint8_t dev_addr[])
...@@ -69,11 +68,10 @@ void get_mac_addr(uint8_t dev_addr[]) ...@@ -69,11 +68,10 @@ void get_mac_addr(uint8_t dev_addr[])
dev_addr[0] = (EP->MACH & 0x0000ff00) >> 8; dev_addr[0] = (EP->MACH & 0x0000ff00) >> 8;
} }
/* Initializes the endpoint and sets its local MAC address */ /* Initializes the endpoint and sets its local MAC address */
void ep_init(uint8_t mac_addr[]) void ep_init(uint8_t mac_addr[])
{ {
EP = (volatile struct EP_WB *) BASE_EP; EP = (volatile struct EP_WB *)BASE_EP;
set_mac_addr(mac_addr); set_mac_addr(mac_addr);
*(unsigned int *)(0x62000) = 0x2; // reset network stuff (cleanup required!) *(unsigned int *)(0x62000) = 0x2; // reset network stuff (cleanup required!)
...@@ -94,8 +92,7 @@ int ep_enable(int enabled, int autoneg) ...@@ -94,8 +92,7 @@ int ep_enable(int enabled, int autoneg)
{ {
uint16_t mcr; uint16_t mcr;
if(!enabled) if (!enabled) {
{
EP->ECR = 0; EP->ECR = 0;
return 0; return 0;
} }
...@@ -124,7 +121,7 @@ int ep_enable(int enabled, int autoneg) ...@@ -124,7 +121,7 @@ int ep_enable(int enabled, int autoneg)
pcs_write(MDIO_REG_ADVERTISE, 0); pcs_write(MDIO_REG_ADVERTISE, 0);
mcr = MDIO_MCR_SPEED1000_MASK | MDIO_MCR_FULLDPLX_MASK; mcr = MDIO_MCR_SPEED1000_MASK | MDIO_MCR_FULLDPLX_MASK;
if(autoneg) if (autoneg)
mcr |= MDIO_MCR_ANENABLE | MDIO_MCR_ANRESTART; mcr |= MDIO_MCR_ANENABLE | MDIO_MCR_ANRESTART;
pcs_write(MDIO_REG_MCR, mcr); pcs_write(MDIO_REG_MCR, mcr);
...@@ -133,34 +130,36 @@ int ep_enable(int enabled, int autoneg) ...@@ -133,34 +130,36 @@ int ep_enable(int enabled, int autoneg)
/* Checks the link status. If the link is up, returns non-zero /* Checks the link status. If the link is up, returns non-zero
and stores the Link Partner Ability (LPA) autonegotiation register at *lpa */ and stores the Link Partner Ability (LPA) autonegotiation register at *lpa */
int ep_link_up(uint16_t *lpa) int ep_link_up(uint16_t * lpa)
{ {
uint16_t flags = MDIO_MSR_LSTATUS; uint16_t flags = MDIO_MSR_LSTATUS;
volatile uint16_t msr; volatile uint16_t msr;
if(autoneg_enabled) if (autoneg_enabled)
flags |= MDIO_MSR_ANEGCOMPLETE; flags |= MDIO_MSR_ANEGCOMPLETE;
msr = pcs_read(MDIO_REG_MSR); msr = pcs_read(MDIO_REG_MSR);
msr = pcs_read(MDIO_REG_MSR); /* Read this flag twice to make sure the status is updated */ msr = pcs_read(MDIO_REG_MSR); /* Read this flag twice to make sure the status is updated */
if(lpa) *lpa = pcs_read(MDIO_REG_LPA); if (lpa)
*lpa = pcs_read(MDIO_REG_LPA);
return (msr & flags) == flags ? 1 : 0; return (msr & flags) == flags ? 1 : 0;
} }
/* Returns the TX/RX latencies. They are valid only when the link is up. */ /* Returns the TX/RX latencies. They are valid only when the link is up. */
int ep_get_deltas(uint32_t *delta_tx, uint32_t *delta_rx) int ep_get_deltas(uint32_t * delta_tx, uint32_t * delta_rx)
{ {
/* fixme: these values should be stored in calibration block in the EEPROM on the FMC. Also, the TX/RX delays of a particular SFP /* fixme: these values should be stored in calibration block in the EEPROM on the FMC. Also, the TX/RX delays of a particular SFP
should be added here */ should be added here */
*delta_tx = sfp_deltaTx; *delta_tx = sfp_deltaTx;
*delta_rx = sfp_deltaRx + PICOS_PER_SERIAL_BIT * MDIO_WR_SPEC_BSLIDE_R(pcs_read(MDIO_REG_WR_SPEC)); *delta_rx =
sfp_deltaRx +
PICOS_PER_SERIAL_BIT *
MDIO_WR_SPEC_BSLIDE_R(pcs_read(MDIO_REG_WR_SPEC));
return 0; return 0;
} }
int ep_cal_pattern_enable() int ep_cal_pattern_enable()
{ {
uint32_t val; uint32_t val;
......
...@@ -60,7 +60,6 @@ ...@@ -60,7 +60,6 @@
FIN instruction terminates the program. FIN instruction terminates the program.
NOP executes a dummy instruction (LOGIC2 0, 0, AND, 0) NOP executes a dummy instruction (LOGIC2 0, 0, AND, 0)
IMPORTANT: IMPORTANT:
- the program counter is advanved each time a 16-bit words of the packet arrives. - the program counter is advanved each time a 16-bit words of the packet arrives.
- the CPU doesn't have any interlocks to simplify the HW, so you can't compare the - the CPU doesn't have any interlocks to simplify the HW, so you can't compare the
...@@ -69,8 +68,6 @@ ...@@ -69,8 +68,6 @@
32 instructions (there's no flow throttling) 32 instructions (there's no flow throttling)
*/ */
#include <stdio.h> #include <stdio.h>
#include "board.h" #include "board.h"
...@@ -83,13 +80,12 @@ ...@@ -83,13 +80,12 @@
extern volatile struct EP_WB *EP; extern volatile struct EP_WB *EP;
static const uint64_t PF_MODE_LOGIC = (1ULL<<34); static const uint64_t PF_MODE_LOGIC = (1ULL << 34);
static const uint64_t PF_MODE_CMP = 0ULL; static const uint64_t PF_MODE_CMP = 0ULL;
static int code_pos; static int code_pos;
static uint64_t code_buf[32]; static uint64_t code_buf[32];
/* begins assembling a new packet filter program */ /* begins assembling a new packet filter program */
void pfilter_new() void pfilter_new()
{ {
...@@ -98,40 +94,40 @@ void pfilter_new() ...@@ -98,40 +94,40 @@ void pfilter_new()
static void check_size() static void check_size()
{ {
if(code_pos == PFILTER_MAX_CODE_SIZE - 1) if (code_pos == PFILTER_MAX_CODE_SIZE - 1) {
{ pfilter_dbg("microcode: code too big (max size: %d)\n",
pfilter_dbg("microcode: code too big (max size: %d)\n", PFILTER_MAX_CODE_SIZE); PFILTER_MAX_CODE_SIZE);
} }
} }
static void check_reg_range(int val, int minval, int maxval, char *name) static void check_reg_range(int val, int minval, int maxval, char *name)
{ {
if(val < minval || val > maxval) if (val < minval || val > maxval) {
{ pfilter_dbg("microcode: %s register out of range (%d to %d)",
pfilter_dbg("microcode: %s register out of range (%d to %d)", name, minval,maxval); name, minval, maxval);
} }
} }
void pfilter_cmp(int offset, int value, int mask, pfilter_op_t op, int rd) void pfilter_cmp(int offset, int value, int mask, pfilter_op_t op, int rd)
{ {
uint64_t ir; uint64_t ir;
check_size(); check_size();
if(offset > code_pos) if (offset > code_pos)
pfilter_dbg("microcode: comparison offset is bigger than current PC. Insert some nops before comparing"); pfilter_dbg
("microcode: comparison offset is bigger than current PC. Insert some nops before comparing");
check_reg_range(rd, 1, 15, "ra/rd"); check_reg_range(rd, 1, 15, "ra/rd");
ir = (PF_MODE_CMP | ((uint64_t)offset << 7) ir = (PF_MODE_CMP | ((uint64_t) offset << 7)
| ((mask & 0x1) ? (1ULL<<29) : 0) | ((mask & 0x1) ? (1ULL << 29) : 0)
| ((mask & 0x10) ? (1ULL<<30) : 0) | ((mask & 0x10) ? (1ULL << 30) : 0)
| ((mask & 0x100) ? (1ULL<<31) : 0) | ((mask & 0x100) ? (1ULL << 31) : 0)
| ((mask & 0x1000) ? (1ULL<<32) : 0)) | ((mask & 0x1000) ? (1ULL << 32) : 0))
| op | (rd << 3); | op | (rd << 3);
ir = ir | ((uint64_t)value & 0xffffULL) << 13; ir = ir | ((uint64_t) value & 0xffffULL) << 13;
code_buf[code_pos++] = ir; code_buf[code_pos++] = ir;
} }
...@@ -143,13 +139,16 @@ void pfilter_btst(int offset, int bit_index, pfilter_op_t op, int rd) ...@@ -143,13 +139,16 @@ void pfilter_btst(int offset, int bit_index, pfilter_op_t op, int rd)
check_size(); check_size();
if(offset > code_pos) if (offset > code_pos)
pfilter_dbg("microcode: comparison offset is bigger than current PC. Insert some nops before comparing"); pfilter_dbg
("microcode: comparison offset is bigger than current PC. Insert some nops before comparing");
check_reg_range(rd, 1, 15, "ra/rd"); check_reg_range(rd, 1, 15, "ra/rd");
check_reg_range(bit_index, 0, 15, "bit index"); check_reg_range(bit_index, 0, 15, "bit index");
ir = ((1ULL<<33) | PF_MODE_CMP | ((uint64_t)offset << 7) | ((uint64_t)bit_index << 29) | (uint64_t)op | ((uint64_t)rd << 3)); ir = ((1ULL << 33) | PF_MODE_CMP | ((uint64_t) offset << 7) |
((uint64_t) bit_index << 29) | (uint64_t) op | ((uint64_t) rd <<
3));
code_buf[code_pos++] = ir; code_buf[code_pos++] = ir;
} }
...@@ -171,13 +170,15 @@ void pfilter_logic2(int rd, int ra, pfilter_op_t op, int rb) ...@@ -171,13 +170,15 @@ void pfilter_logic2(int rd, int ra, pfilter_op_t op, int rb)
check_reg_range(rb, 0, 31, "rb"); check_reg_range(rb, 0, 31, "rb");
check_reg_range(rd, 1, 31, "rd"); check_reg_range(rd, 1, 31, "rd");
ir = ((uint64_t)ra << 8) | ((uint64_t)rb << 13) | (((uint64_t)rd & 0xf) << 3) | (((uint64_t)rd & 0x10) ? (1ULL<<7) : 0) | (uint64_t)op; ir = ((uint64_t) ra << 8) | ((uint64_t) rb << 13) |
ir = ir | PF_MODE_LOGIC | (3ULL<<23); (((uint64_t) rd & 0xf) << 3) | (((uint64_t) rd & 0x10) ? (1ULL << 7)
: 0) | (uint64_t) op;
ir = ir | PF_MODE_LOGIC | (3ULL << 23);
code_buf[code_pos++] = ir; code_buf[code_pos++] = ir;
} }
static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb,
static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t op2, int rc) pfilter_op_t op2, int rc)
{ {
uint64_t ir; uint64_t ir;
check_size(); check_size();
...@@ -186,8 +187,9 @@ static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t ...@@ -186,8 +187,9 @@ static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t
check_reg_range(rc, 0, 31, "rb"); check_reg_range(rc, 0, 31, "rb");
check_reg_range(rd, 1, 31, "rd"); check_reg_range(rd, 1, 31, "rd");
ir = (ra << 8) | (rb << 13) | (rc << 18) | ((rd & 0xf) << 3) | ((rd & 0x10) ? (1<<7) : 0) | op; ir = (ra << 8) | (rb << 13) | (rc << 18) | ((rd & 0xf) << 3) |
ir = ir | PF_MODE_LOGIC | (op2<<23); ((rd & 0x10) ? (1 << 7) : 0) | op;
ir = ir | PF_MODE_LOGIC | (op2 << 23);
code_buf[code_pos++] = ir; code_buf[code_pos++] = ir;
} }
...@@ -195,15 +197,17 @@ static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t ...@@ -195,15 +197,17 @@ static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t
void pfilter_load() void pfilter_load()
{ {
int i; int i;
code_buf[code_pos++] = (1ULL<<35); // insert FIN instruction code_buf[code_pos++] = (1ULL << 35); // insert FIN instruction
EP->PFCR0 = 0; // disable pfilter EP->PFCR0 = 0; // disable pfilter
for(i=0;i<code_pos;i++) for (i = 0; i < code_pos; i++) {
{
uint32_t cr0, cr1; uint32_t cr0, cr1;
cr1 = EP_PFCR1_MM_DATA_LSB_W(code_buf[i] & 0xfff); cr1 = EP_PFCR1_MM_DATA_LSB_W(code_buf[i] & 0xfff);
cr0 = EP_PFCR0_MM_ADDR_W(i) | EP_PFCR0_MM_DATA_MSB_W(code_buf[i]>>12) | EP_PFCR0_MM_WRITE_MASK; cr0 =
EP_PFCR0_MM_ADDR_W(i) | EP_PFCR0_MM_DATA_MSB_W(code_buf[i]
>> 12) |
EP_PFCR0_MM_WRITE_MASK;
EP->PFCR1 = cr1; EP->PFCR1 = cr1;
EP->PFCR0 = cr0; EP->PFCR0 = cr0;
...@@ -239,8 +243,8 @@ void pfilter_init_default() ...@@ -239,8 +243,8 @@ void pfilter_init_default()
pfilter_cmp(6, 0x0806, 0xffff, MOV, 6); /* r6 = 1 when ethertype = ARP */ pfilter_cmp(6, 0x0806, 0xffff, MOV, 6); /* r6 = 1 when ethertype = ARP */
/* Ethernet = 14 bytes, Offset to type in IP: 8 bytes = 22/2 = 11 */ /* Ethernet = 14 bytes, Offset to type in IP: 8 bytes = 22/2 = 11 */
pfilter_cmp(11,0x0001, 0x00ff, MOV, 7); /* r7 = 1 when IP type = ICMP */ pfilter_cmp(11, 0x0001, 0x00ff, MOV, 7); /* r7 = 1 when IP type = ICMP */
pfilter_cmp(11,0x0011, 0x00ff, MOV, 8); /* r8 = 1 when IP type = UDP */ pfilter_cmp(11, 0x0011, 0x00ff, MOV, 8); /* r8 = 1 when IP type = UDP */
pfilter_logic3(10, 3, OR, 0, AND, 4); /* r10 = IP(unicast) */ pfilter_logic3(10, 3, OR, 0, AND, 4); /* r10 = IP(unicast) */
pfilter_logic3(11, 1, OR, 3, AND, 4); /* r11 = IP(unicast+broadcast) */ pfilter_logic3(11, 1, OR, 3, AND, 4); /* r11 = IP(unicast+broadcast) */
......
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
void mi2c_delay() void mi2c_delay()
{ {
int i; int i;
for(i=0;i<I2C_DELAY;i++) asm volatile ("nop"); for (i = 0; i < I2C_DELAY; i++)
asm volatile ("nop");
} }
#define M_SDA_OUT(i, x) { gpio_out(i2c_if[i].sda, x); mi2c_delay(); } #define M_SDA_OUT(i, x) { gpio_out(i2c_if[i].sda, x); mi2c_delay(); }
...@@ -40,9 +41,8 @@ unsigned char mi2c_put_byte(uint8_t i2cif, unsigned char data) ...@@ -40,9 +41,8 @@ unsigned char mi2c_put_byte(uint8_t i2cif, unsigned char data)
char i; char i;
unsigned char ack; unsigned char ack;
for (i=0;i<8;i++, data<<=1) for (i = 0; i < 8; i++, data <<= 1) {
{ M_SDA_OUT(i2cif, data & 0x80);
M_SDA_OUT(i2cif, data&0x80);
M_SCL_OUT(i2cif, 1); M_SCL_OUT(i2cif, 1);
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
} }
...@@ -55,7 +55,7 @@ unsigned char mi2c_put_byte(uint8_t i2cif, unsigned char data) ...@@ -55,7 +55,7 @@ unsigned char mi2c_put_byte(uint8_t i2cif, unsigned char data)
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
M_SDA_OUT(i2cif, 0); M_SDA_OUT(i2cif, 0);
return ack!=0; return ack != 0;
} }
void mi2c_get_byte(uint8_t i2cif, unsigned char *data, uint8_t last) void mi2c_get_byte(uint8_t i2cif, unsigned char *data, uint8_t last)
...@@ -68,28 +68,25 @@ void mi2c_get_byte(uint8_t i2cif, unsigned char *data, uint8_t last) ...@@ -68,28 +68,25 @@ void mi2c_get_byte(uint8_t i2cif, unsigned char *data, uint8_t last)
/* assert: scl is low */ /* assert: scl is low */
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
for (i=0;i<8;i++) for (i = 0; i < 8; i++) {
{
M_SCL_OUT(i2cif, 1); M_SCL_OUT(i2cif, 1);
indata <<= 1; indata <<= 1;
if ( M_SDA_IN(i2cif) ) indata |= 0x01; if (M_SDA_IN(i2cif))
indata |= 0x01;
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
} }
if(last) if (last) {
{
M_SDA_OUT(i2cif, 1); //noack M_SDA_OUT(i2cif, 1); //noack
M_SCL_OUT(i2cif, 1); M_SCL_OUT(i2cif, 1);
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
} } else {
else
{
M_SDA_OUT(i2cif, 0); //ack M_SDA_OUT(i2cif, 0); //ack
M_SCL_OUT(i2cif, 1); M_SCL_OUT(i2cif, 1);
M_SCL_OUT(i2cif, 0); M_SCL_OUT(i2cif, 0);
} }
*data= indata; *data = indata;
} }
void mi2c_init(uint8_t i2cif) void mi2c_init(uint8_t i2cif)
...@@ -102,7 +99,7 @@ uint8_t mi2c_devprobe(uint8_t i2cif, uint8_t i2c_addr) ...@@ -102,7 +99,7 @@ uint8_t mi2c_devprobe(uint8_t i2cif, uint8_t i2c_addr)
{ {
uint8_t ret; uint8_t ret;
mi2c_start(i2cif); mi2c_start(i2cif);
ret = !mi2c_put_byte(i2cif, i2c_addr<<1); ret = !mi2c_put_byte(i2cif, i2c_addr << 1);
mi2c_stop(i2cif); mi2c_stop(i2cif);
return ret; return ret;
......
This diff is collapsed.
...@@ -14,7 +14,8 @@ void own_scanbus(uint8_t portnum) ...@@ -14,7 +14,8 @@ void own_scanbus(uint8_t portnum)
found_msk = 0; found_msk = 0;
devsnum = 0; devsnum = 0;
devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x28, MAX_DEV1WIRE - devsnum); /* Temperature 28 sensor (SPEC) */ devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x28, MAX_DEV1WIRE - devsnum); /* Temperature 28 sensor (SPEC) */
if(devsnum>0) found_msk |= FOUND_DS18B20; if (devsnum > 0)
found_msk |= FOUND_DS18B20;
devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x42, MAX_DEV1WIRE - devsnum); /* Temperature 42 sensor (SCU) */ devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x42, MAX_DEV1WIRE - devsnum); /* Temperature 42 sensor (SCU) */
devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x43, MAX_DEV1WIRE - devsnum); /* EEPROM */ devsnum += FindDevices(portnum, &FamilySN[devsnum], 0x43, MAX_DEV1WIRE - devsnum); /* EEPROM */
#if DEBUG_PMAC #if DEBUG_PMAC
...@@ -22,15 +23,15 @@ void own_scanbus(uint8_t portnum) ...@@ -22,15 +23,15 @@ void own_scanbus(uint8_t portnum)
#endif #endif
} }
int16_t own_readtemp(uint8_t portnum, int16_t *temp, int16_t *t_frac) int16_t own_readtemp(uint8_t portnum, int16_t * temp, int16_t * t_frac)
{ {
if(!(found_msk & FOUND_DS18B20)) if (!(found_msk & FOUND_DS18B20))
return -1; return -1;
if(ReadTemperature28(portnum, FamilySN[0], temp)) if (ReadTemperature28(portnum, FamilySN[0], temp)) {
{ *t_frac =
*t_frac = 5000*(!!(*temp & 0x08)) + 2500*(!!(*temp & 0x04)) + 1250*(!!(*temp & 0x02)) + 5000 * (! !(*temp & 0x08)) + 2500 * (! !(*temp & 0x04)) +
625*(!!(*temp & 0x01)); 1250 * (! !(*temp & 0x02)) + 625 * (! !(*temp & 0x01));
*t_frac = *t_frac/100 + (*t_frac%100)/50; *t_frac = *t_frac / 100 + (*t_frac % 100) / 50;
*temp >>= 4; *temp >>= 4;
return 0; return 0;
} }
...@@ -38,7 +39,7 @@ int16_t own_readtemp(uint8_t portnum, int16_t *temp, int16_t *t_frac) ...@@ -38,7 +39,7 @@ int16_t own_readtemp(uint8_t portnum, int16_t *temp, int16_t *t_frac)
} }
/* 0 = success, -1 = error */ /* 0 = success, -1 = error */
int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac) int8_t get_persistent_mac(uint8_t portnum, uint8_t * mac)
{ {
uint8_t read_buffer[32]; uint8_t read_buffer[32];
uint8_t i; uint8_t i;
...@@ -46,7 +47,8 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac) ...@@ -46,7 +47,8 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac)
out = -1; out = -1;
if(devsnum == 0) return out; if (devsnum == 0)
return out;
for (i = 0; i < devsnum; ++i) { for (i = 0; i < devsnum; ++i) {
//#if DEBUG_PMAC //#if DEBUG_PMAC
...@@ -69,18 +71,23 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac) ...@@ -69,18 +71,23 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac)
/* If there is an EEPROM, read page 0 for the MAC */ /* If there is an EEPROM, read page 0 for the MAC */
if (FamilySN[i][0] == 0x43) { if (FamilySN[i][0] == 0x43) {
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
if (ReadMem43(portnum, FamilySN[i], EEPROM_MAC_PAGE, &read_buffer) == TRUE) { if (ReadMem43(portnum, FamilySN[i], EEPROM_MAC_PAGE,
if (read_buffer[0] == 0 && read_buffer[1] == 0 && read_buffer[2] == 0) { &read_buffer) == TRUE) {
if (read_buffer[0] == 0 && read_buffer[1] == 0
&& read_buffer[2] == 0) {
/* Skip the EEPROM since it has not been programmed! */ /* Skip the EEPROM since it has not been programmed! */
#if DEBUG_PMAC #if DEBUG_PMAC
mprintf("EEPROM has not been programmed with a MAC\n"); mprintf("EEPROM has not been "
"programmed with a MAC\n");
#endif #endif
} else { } else {
memcpy(mac, read_buffer, 6); memcpy(mac, read_buffer, 6);
out = 0; out = 0;
#if DEBUG_PMAC #if DEBUG_PMAC
mprintf("Using EEPROM page: %x:%x:%x:%x:%x:%x\n", mprintf("Using EEPROM page: "
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); "%x:%x:%x:%x:%x:%x\n",
mac[0], mac[1], mac[2], mac[3],
mac[4], mac[5]);
#endif #endif
} }
} }
...@@ -91,13 +98,14 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac) ...@@ -91,13 +98,14 @@ int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac)
} }
/* 0 = success, -1 = error */ /* 0 = success, -1 = error */
int8_t set_persistent_mac(uint8_t portnum, uint8_t* mac) int8_t set_persistent_mac(uint8_t portnum, uint8_t * mac)
{ {
uint8_t FamilySN[1][8]; uint8_t FamilySN[1][8];
uint8_t write_buffer[32]; uint8_t write_buffer[32];
// Find the device (only the first one, we won't write MAC to all EEPROMs out there, right?) // Find the device (only the first one, we won't write MAC to all EEPROMs out there, right?)
if( FindDevices(portnum, &FamilySN[0], 0x43, 1) == 0) return -1; if (FindDevices(portnum, &FamilySN[0], 0x43, 1) == 0)
return -1;
memset(write_buffer, 0, sizeof(write_buffer)); memset(write_buffer, 0, sizeof(write_buffer));
memcpy(write_buffer, mac, 6); memcpy(write_buffer, mac, 6);
...@@ -108,7 +116,8 @@ int8_t set_persistent_mac(uint8_t portnum, uint8_t* mac) ...@@ -108,7 +116,8 @@ int8_t set_persistent_mac(uint8_t portnum, uint8_t* mac)
/* Write the last EEPROM with the MAC */ /* Write the last EEPROM with the MAC */
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
if (Write43(portnum, FamilySN[0], EEPROM_MAC_PAGE, &write_buffer) == TRUE) if (Write43(portnum, FamilySN[0], EEPROM_MAC_PAGE, &write_buffer) ==
TRUE)
return 0; return 0;
return -1; return -1;
......
...@@ -41,16 +41,18 @@ int pps_gen_adjust(int counter, int64_t how_much) ...@@ -41,16 +41,18 @@ int pps_gen_adjust(int counter, int64_t how_much)
uint32_t cr; uint32_t cr;
TRACE_DEV("Adjust: counter = %s [%c%d]\n", TRACE_DEV("Adjust: counter = %s [%c%d]\n",
counter == PPSG_ADJUST_SEC ? "seconds" : "nanoseconds", how_much<0?'-':'+', (int32_t)abs(how_much)); counter == PPSG_ADJUST_SEC ? "seconds" : "nanoseconds",
how_much < 0 ? '-' : '+', (int32_t) abs(how_much));
if(counter == PPSG_ADJUST_NSEC) if (counter == PPSG_ADJUST_NSEC) {
{
ppsg_write(ADJ_UTCLO, 0); ppsg_write(ADJ_UTCLO, 0);
ppsg_write(ADJ_UTCHI, 0); ppsg_write(ADJ_UTCHI, 0);
ppsg_write(ADJ_NSEC, (int32_t) ((int64_t) how_much * 1000LL / (int64_t)REF_CLOCK_PERIOD_PS)); ppsg_write(ADJ_NSEC,
(int32_t) ((int64_t) how_much * 1000LL /
(int64_t) REF_CLOCK_PERIOD_PS));
} else { } else {
ppsg_write(ADJ_UTCLO, (uint32_t ) (how_much & 0xffffffffLL)); ppsg_write(ADJ_UTCLO, (uint32_t) (how_much & 0xffffffffLL));
ppsg_write(ADJ_UTCHI, (uint32_t ) (how_much >> 32) & 0xff); ppsg_write(ADJ_UTCHI, (uint32_t) (how_much >> 32) & 0xff);
ppsg_write(ADJ_NSEC, 0); ppsg_write(ADJ_NSEC, 0);
} }
...@@ -63,9 +65,11 @@ int pps_gen_set_time(uint64_t seconds, uint32_t nanoseconds) ...@@ -63,9 +65,11 @@ int pps_gen_set_time(uint64_t seconds, uint32_t nanoseconds)
{ {
uint32_t cr; uint32_t cr;
ppsg_write(ADJ_UTCLO, (uint32_t ) (seconds & 0xffffffffLL)); ppsg_write(ADJ_UTCLO, (uint32_t) (seconds & 0xffffffffLL));
ppsg_write(ADJ_UTCHI, (uint32_t ) (seconds >> 32) & 0xff); ppsg_write(ADJ_UTCHI, (uint32_t) (seconds >> 32) & 0xff);
ppsg_write(ADJ_NSEC, (int32_t) ((int64_t) nanoseconds * 1000LL / (int64_t)REF_CLOCK_PERIOD_PS)); ppsg_write(ADJ_NSEC,
(int32_t) ((int64_t) nanoseconds * 1000LL /
(int64_t) REF_CLOCK_PERIOD_PS));
ppsg_write(CR, (ppsg_read(CR) & 0xfffffffb) | PPSG_CR_CNT_SET); ppsg_write(CR, (ppsg_read(CR) & 0xfffffffb) | PPSG_CR_CNT_SET);
return 0; return 0;
...@@ -81,11 +85,11 @@ uint64_t pps_get_utc(void) ...@@ -81,11 +85,11 @@ uint64_t pps_get_utc(void)
high &= 0xFF; /* CNTR_UTCHI has only 8 bits defined -- rest are HDL don't care */ high &= 0xFF; /* CNTR_UTCHI has only 8 bits defined -- rest are HDL don't care */
out = (uint64_t)low | (uint64_t)high << 32; out = (uint64_t) low | (uint64_t) high << 32;
return out; return out;
} }
void pps_gen_get_time(uint64_t *seconds, uint32_t *nanoseconds) void pps_gen_get_time(uint64_t * seconds, uint32_t * nanoseconds)
{ {
uint32_t ns_cnt; uint32_t ns_cnt;
uint64_t sec1, sec2; uint64_t sec1, sec2;
...@@ -94,10 +98,14 @@ void pps_gen_get_time(uint64_t *seconds, uint32_t *nanoseconds) ...@@ -94,10 +98,14 @@ void pps_gen_get_time(uint64_t *seconds, uint32_t *nanoseconds)
sec1 = pps_get_utc(); sec1 = pps_get_utc();
ns_cnt = ppsg_read(CNTR_NSEC) & 0xFFFFFFFUL; /* 28-bit wide register */ ns_cnt = ppsg_read(CNTR_NSEC) & 0xFFFFFFFUL; /* 28-bit wide register */
sec2 = pps_get_utc(); sec2 = pps_get_utc();
} while(sec2 != sec1); } while (sec2 != sec1);
if(seconds) *seconds = sec2; if (seconds)
if(nanoseconds) *nanoseconds = (uint32_t) ((int64_t)ns_cnt * (int64_t) REF_CLOCK_PERIOD_PS / 1000LL); *seconds = sec2;
if (nanoseconds)
*nanoseconds =
(uint32_t) ((int64_t) ns_cnt *
(int64_t) REF_CLOCK_PERIOD_PS / 1000LL);
} }
/* Returns 1 when the adjustment operation is not yet finished */ /* Returns 1 when the adjustment operation is not yet finished */
...@@ -111,10 +119,12 @@ int pps_gen_busy() ...@@ -111,10 +119,12 @@ int pps_gen_busy()
int pps_gen_enable_output(int enable) int pps_gen_enable_output(int enable)
{ {
uint32_t escr = ppsg_read(ESCR); uint32_t escr = ppsg_read(ESCR);
if(enable) if (enable)
ppsg_write(ESCR, escr | PPSG_ESCR_PPS_VALID | PPSG_ESCR_TM_VALID); ppsg_write(ESCR,
escr | PPSG_ESCR_PPS_VALID | PPSG_ESCR_TM_VALID);
else else
ppsg_write(ESCR, escr & ~(PPSG_ESCR_PPS_VALID | PPSG_ESCR_TM_VALID)); ppsg_write(ESCR,
escr & ~(PPSG_ESCR_PPS_VALID | PPSG_ESCR_TM_VALID));
return 0; return 0;
} }
...@@ -58,19 +58,23 @@ typedef union sdb_record { ...@@ -58,19 +58,23 @@ typedef union sdb_record {
struct sdb_interconnect interconnect; struct sdb_interconnect interconnect;
} sdb_record_t; } sdb_record_t;
static unsigned char* find_device_deep(unsigned int base, unsigned int sdb, unsigned int devid) { static unsigned char *find_device_deep(unsigned int base, unsigned int sdb,
sdb_record_t* record = (sdb_record_t*)sdb; unsigned int devid)
{
sdb_record_t *record = (sdb_record_t *) sdb;
int records = record->interconnect.sdb_records; int records = record->interconnect.sdb_records;
int i; int i;
for (i = 0; i < records; ++i, ++record) { for (i = 0; i < records; ++i, ++record) {
if (record->empty.record_type == SDB_BRIDGE) { if (record->empty.record_type == SDB_BRIDGE) {
unsigned char* out = unsigned char *out =
find_device_deep( find_device_deep(base +
base + record->bridge.sdb_component.addr_first.low, record->bridge.sdb_component.
addr_first.low,
record->bridge.sdb_child.low, record->bridge.sdb_child.low,
devid); devid);
if (out) return out; if (out)
return out;
} }
if (record->empty.record_type == SDB_DEVICE && if (record->empty.record_type == SDB_DEVICE &&
record->device.sdb_component.product.device_id == devid) { record->device.sdb_component.product.device_id == devid) {
...@@ -78,23 +82,28 @@ static unsigned char* find_device_deep(unsigned int base, unsigned int sdb, unsi ...@@ -78,23 +82,28 @@ static unsigned char* find_device_deep(unsigned int base, unsigned int sdb, unsi
} }
} }
if (i == records) return 0; if (i == records)
return (unsigned char*)(base + record->device.sdb_component.addr_first.low); return 0;
return (unsigned char *)(base +
record->device.sdb_component.addr_first.low);
} }
static void print_devices_deep(unsigned int base, unsigned int sdb) { static void print_devices_deep(unsigned int base, unsigned int sdb)
sdb_record_t* record = (sdb_record_t*)sdb; {
sdb_record_t *record = (sdb_record_t *) sdb;
int records = record->interconnect.sdb_records; int records = record->interconnect.sdb_records;
int i; int i;
char buf[20]; char buf[20];
for (i = 0; i < records; ++i, ++record) { for (i = 0; i < records; ++i, ++record) {
if (record->empty.record_type == SDB_BRIDGE) if (record->empty.record_type == SDB_BRIDGE)
print_devices_deep( print_devices_deep(base +
base + record->bridge.sdb_component.addr_first.low, record->bridge.sdb_component.
addr_first.low,
record->bridge.sdb_child.low); record->bridge.sdb_child.low);
if (record->empty.record_type != SDB_DEVICE) continue; if (record->empty.record_type != SDB_DEVICE)
continue;
memcpy(buf, record->device.sdb_component.product.name, 19); memcpy(buf, record->device.sdb_component.product.name, 19);
buf[19] = 0; buf[19] = 0;
...@@ -106,17 +115,20 @@ static void print_devices_deep(unsigned int base, unsigned int sdb) { ...@@ -106,17 +115,20 @@ static void print_devices_deep(unsigned int base, unsigned int sdb) {
} }
} }
static unsigned char* find_device(unsigned int devid) { static unsigned char *find_device(unsigned int devid)
{
find_device_deep(0, SDB_ADDRESS, devid); find_device_deep(0, SDB_ADDRESS, devid);
} }
void sdb_print_devices(void) { void sdb_print_devices(void)
{
mprintf("SDB memory map:\n"); mprintf("SDB memory map:\n");
print_devices_deep(0, SDB_ADDRESS); print_devices_deep(0, SDB_ADDRESS);
mprintf("---\n"); mprintf("---\n");
} }
void sdb_find_devices(void) { void sdb_find_devices(void)
{
BASE_MINIC = find_device(0xab28633a); BASE_MINIC = find_device(0xab28633a);
BASE_EP = find_device(0x650c2d4f); BASE_EP = find_device(0x650c2d4f);
BASE_SOFTPLL = find_device(0x65158dc0); BASE_SOFTPLL = find_device(0x65158dc0);
......
...@@ -30,17 +30,16 @@ int sfp_read_part_id(char *part_id) ...@@ -30,17 +30,16 @@ int sfp_read_part_id(char *part_id)
mi2c_start(WRPC_SFP_I2C); mi2c_start(WRPC_SFP_I2C);
mi2c_put_byte(WRPC_SFP_I2C, 0xA1); mi2c_put_byte(WRPC_SFP_I2C, 0xA1);
for(i=1; i<63; ++i) for (i = 1; i < 63; ++i) {
{
mi2c_get_byte(WRPC_SFP_I2C, &data, 0); mi2c_get_byte(WRPC_SFP_I2C, &data, 0);
sum = (uint8_t) ((uint16_t)sum + data) & 0xff; sum = (uint8_t) ((uint16_t) sum + data) & 0xff;
if(i>=40 && i<=55) //Part Number if (i >= 40 && i <= 55) //Part Number
part_id[i-40] = data; part_id[i - 40] = data;
} }
mi2c_get_byte(WRPC_SFP_I2C, &data, 1); //final word, checksum mi2c_get_byte(WRPC_SFP_I2C, &data, 1); //final word, checksum
mi2c_stop(WRPC_SFP_I2C); mi2c_stop(WRPC_SFP_I2C);
if(sum == data) if (sum == data)
return 0; return 0;
return -1; return -1;
......
#include "syscon.h" #include "syscon.h"
struct s_i2c_if i2c_if[2] = { {SYSC_GPSR_FMC_SCL, SYSC_GPSR_FMC_SDA}, struct s_i2c_if i2c_if[2] = {
{SYSC_GPSR_SFP_SCL, SYSC_GPSR_SFP_SDA} }; {SYSC_GPSR_FMC_SCL, SYSC_GPSR_FMC_SDA},
{SYSC_GPSR_SFP_SCL, SYSC_GPSR_SFP_SDA}
};
volatile struct SYSCON_WB *syscon; volatile struct SYSCON_WB *syscon;
...@@ -10,9 +12,9 @@ volatile struct SYSCON_WB *syscon; ...@@ -10,9 +12,9 @@ volatile struct SYSCON_WB *syscon;
***************************/ ***************************/
void timer_init(uint32_t enable) void timer_init(uint32_t enable)
{ {
syscon = (volatile struct SYSCON_WB *) BASE_SYSCON; syscon = (volatile struct SYSCON_WB *)BASE_SYSCON;
if(enable) if (enable)
syscon->TCR |= SYSC_TCR_ENABLE; syscon->TCR |= SYSC_TCR_ENABLE;
else else
syscon->TCR &= ~SYSC_TCR_ENABLE; syscon->TCR &= ~SYSC_TCR_ENABLE;
...@@ -28,10 +30,9 @@ void timer_delay(uint32_t how_long) ...@@ -28,10 +30,9 @@ void timer_delay(uint32_t how_long)
uint32_t t_start; uint32_t t_start;
// timer_init(1); // timer_init(1);
do do {
{
t_start = timer_get_tics(); t_start = timer_get_tics();
} while(t_start > UINT32_MAX - how_long); //in case of overflow } while (t_start > UINT32_MAX - how_long); //in case of overflow
while(t_start + how_long > timer_get_tics()); while (t_start + how_long > timer_get_tics()) ;
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
uint32_t timer_get_tics() uint32_t timer_get_tics()
{ {
return *(volatile uint32_t *) (BASE_TIMER); return *(volatile uint32_t *)(BASE_TIMER);
} }
void timer_delay(uint32_t how_long) void timer_delay(uint32_t how_long)
...@@ -13,5 +13,5 @@ void timer_delay(uint32_t how_long) ...@@ -13,5 +13,5 @@ void timer_delay(uint32_t how_long)
t_start = timer_get_tics(); t_start = timer_get_tics();
while(t_start + how_long > timer_get_tics()); while (t_start + how_long > timer_get_tics()) ;
} }
...@@ -13,16 +13,15 @@ volatile struct UART_WB *uart; ...@@ -13,16 +13,15 @@ volatile struct UART_WB *uart;
void uart_init() void uart_init()
{ {
uart = (volatile struct UART_WB *) BASE_UART; uart = (volatile struct UART_WB *)BASE_UART;
uart->BCR = CALC_BAUD(UART_BAUDRATE); uart->BCR = CALC_BAUD(UART_BAUDRATE);
} }
void uart_write_byte(int b) void uart_write_byte(int b)
{ {
if(b == '\n') if (b == '\n')
uart_write_byte('\r'); uart_write_byte('\r');
while(uart->SR & UART_SR_TX_BUSY) while (uart->SR & UART_SR_TX_BUSY) ;
;
uart->TDR = b; uart->TDR = b;
} }
...@@ -39,7 +38,7 @@ int uart_poll() ...@@ -39,7 +38,7 @@ int uart_poll()
int uart_read_byte() int uart_read_byte()
{ {
if(!uart_poll()) if (!uart_poll())
return -1; return -1;
return uart->RDR & 0xff; return uart->RDR & 0xff;
......
...@@ -19,28 +19,32 @@ extern int32_t sfp_deltaRx; ...@@ -19,28 +19,32 @@ extern int32_t sfp_deltaRx;
extern uint32_t cal_phase_transition; extern uint32_t cal_phase_transition;
extern uint8_t has_eeprom; extern uint8_t has_eeprom;
struct s_sfpinfo struct s_sfpinfo {
{
char pn[SFP_PN_LEN]; char pn[SFP_PN_LEN];
int32_t alpha; int32_t alpha;
int32_t dTx; int32_t dTx;
int32_t dRx; int32_t dRx;
uint8_t chksum; uint8_t chksum;
} __attribute__((__packed__)); } __attribute__ ((__packed__));
uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr); uint8_t eeprom_present(uint8_t i2cif, uint8_t i2c_addr);
int eeprom_read(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset, uint8_t *buf, size_t size); int eeprom_read(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset, uint8_t * buf,
int eeprom_write(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset, uint8_t *buf, size_t size); size_t size);
int eeprom_write(uint8_t i2cif, uint8_t i2c_addr, uint32_t offset,
uint8_t * buf, size_t size);
int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr); int32_t eeprom_sfpdb_erase(uint8_t i2cif, uint8_t i2c_addr);
int32_t eeprom_sfp_section(uint8_t i2cif, uint8_t i2c_addr, size_t size, uint16_t *section_sz); int32_t eeprom_sfp_section(uint8_t i2cif, uint8_t i2c_addr, size_t size,
int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo* sfp); uint16_t * section_sz);
int8_t eeprom_match_sfp(uint8_t i2cif, uint8_t i2c_addr, struct s_sfpinfo *sfp);
int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t *val, uint8_t write); int8_t eeprom_phtrans(uint8_t i2cif, uint8_t i2c_addr, uint32_t * val,
uint8_t write);
int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr); int8_t eeprom_init_erase(uint8_t i2cif, uint8_t i2c_addr);
int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[]); int8_t eeprom_init_add(uint8_t i2cif, uint8_t i2c_addr, const char *args[]);
int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr); int32_t eeprom_init_show(uint8_t i2cif, uint8_t i2c_addr);
int8_t eeprom_init_readcmd(uint8_t i2cif, uint8_t i2c_addr, char* buf, uint8_t bufsize, uint8_t next); int8_t eeprom_init_readcmd(uint8_t i2cif, uint8_t i2c_addr, char *buf,
uint8_t bufsize, uint8_t next);
#endif #endif
...@@ -7,23 +7,23 @@ ...@@ -7,23 +7,23 @@
#include <stdint.h> #include <stdint.h>
typedef enum { typedef enum {
AND=0, AND = 0,
NAND=4, NAND = 4,
OR=1, OR = 1,
NOR=5, NOR = 5,
XOR=2, XOR = 2,
XNOR=6, XNOR = 6,
MOV=3, MOV = 3,
NOT=7 NOT = 7
} pfilter_op_t; } pfilter_op_t;
void ep_init(uint8_t mac_addr[]); void ep_init(uint8_t mac_addr[]);
void get_mac_addr(uint8_t dev_addr[]); void get_mac_addr(uint8_t dev_addr[]);
void set_mac_addr(uint8_t dev_addr[]); void set_mac_addr(uint8_t dev_addr[]);
int ep_enable(int enabled, int autoneg); int ep_enable(int enabled, int autoneg);
int ep_link_up(uint16_t *lpa); int ep_link_up(uint16_t * lpa);
int ep_get_deltas(uint32_t *delta_tx, uint32_t *delta_rx); int ep_get_deltas(uint32_t * delta_tx, uint32_t * delta_rx);
int ep_get_psval(int32_t *psval); int ep_get_psval(int32_t * psval);
int ep_cal_pattern_enable(); int ep_cal_pattern_enable();
int ep_cal_pattern_disable(); int ep_cal_pattern_disable();
...@@ -32,7 +32,8 @@ void pfilter_cmp(int offset, int value, int mask, pfilter_op_t op, int rd); ...@@ -32,7 +32,8 @@ void pfilter_cmp(int offset, int value, int mask, pfilter_op_t op, int rd);
void pfilter_btst(int offset, int bit_index, pfilter_op_t op, int rd); void pfilter_btst(int offset, int bit_index, pfilter_op_t op, int rd);
void pfilter_nop(); void pfilter_nop();
void pfilter_logic2(int rd, int ra, pfilter_op_t op, int rb); void pfilter_logic2(int rd, int ra, pfilter_op_t op, int rb);
static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb, pfilter_op_t op2, int rc); static void pfilter_logic3(int rd, int ra, pfilter_op_t op, int rb,
pfilter_op_t op2, int rc);
void pfilter_load(); void pfilter_load();
void pfilter_init_default(); void pfilter_init_default();
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value)) #define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value))
#endif #endif
/* definitions for register: MDIO Control Register */ /* definitions for register: MDIO Control Register */
/* definitions for field: Reserved in reg: MDIO Control Register */ /* definitions for field: Reserved in reg: MDIO Control Register */
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
#define SDB_ADDRESS 0x30000 #define SDB_ADDRESS 0x30000
unsigned char* BASE_MINIC; unsigned char *BASE_MINIC;
unsigned char* BASE_EP; unsigned char *BASE_EP;
unsigned char* BASE_SOFTPLL; unsigned char *BASE_SOFTPLL;
unsigned char* BASE_PPS_GEN; unsigned char *BASE_PPS_GEN;
unsigned char* BASE_SYSCON; unsigned char *BASE_SYSCON;
unsigned char* BASE_UART; unsigned char *BASE_UART;
unsigned char* BASE_ONEWIRE; unsigned char *BASE_ONEWIRE;
unsigned char* BASE_ETHERBONE_CFG; unsigned char *BASE_ETHERBONE_CFG;
#define FMC_EEPROM_ADR 0x50 #define FMC_EEPROM_ADR 0x50
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value)) #define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value))
#endif #endif
/* definitions for register: Status Register */ /* definitions for register: Status Register */
/* definitions for field: TX busy in reg: Status Register */ /* definitions for field: TX busy in reg: Status Register */
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value)) #define WBGEN2_SIGN_EXTEND(value, bits) (((value) & (1<<bits) ? ~((1<<(bits))-1): 0 ) | (value))
#endif #endif
/* definitions for register: Status Register */ /* definitions for register: Status Register */
/* definitions for field: TX busy in reg: Status Register */ /* definitions for field: TX busy in reg: Status Register */
......
#ifndef __I2C_H #ifndef __I2C_H
#define __I2C_H #define __I2C_H
uint8_t mi2c_devprobe(uint8_t i2cif, uint8_t i2c_addr); uint8_t mi2c_devprobe(uint8_t i2cif, uint8_t i2c_addr);
void mi2c_init(uint8_t i2cif); void mi2c_init(uint8_t i2cif);
void mi2c_start(uint8_t i2cif); void mi2c_start(uint8_t i2cif);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
static inline void clear_irq() static inline void clear_irq()
{ {
unsigned int val = 1; unsigned int val = 1;
asm volatile ("wcsr ip, %0"::"r"(val)); asm volatile ("wcsr ip, %0"::"r" (val));
} }
void disable_irq(); void disable_irq();
......
...@@ -11,9 +11,9 @@ void minic_disable(); ...@@ -11,9 +11,9 @@ void minic_disable();
int minic_poll_rx(); int minic_poll_rx();
void minic_get_stats(int *tx_frames, int *rx_frames); void minic_get_stats(int *tx_frames, int *rx_frames);
int minic_rx_frame(uint8_t *hdr, uint8_t *payload, uint32_t buf_size, struct hw_timestamp *hwts); int minic_rx_frame(uint8_t * hdr, uint8_t * payload, uint32_t buf_size,
int minic_tx_frame(uint8_t *hdr, uint8_t *payload, uint32_t size, struct hw_timestamp *hwts); struct hw_timestamp *hwts);
int minic_tx_frame(uint8_t * hdr, uint8_t * payload, uint32_t size,
struct hw_timestamp *hwts);
#endif #endif
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
#define FOUND_DS18B20 0x01 #define FOUND_DS18B20 0x01
void own_scanbus(uint8_t portnum); void own_scanbus(uint8_t portnum);
int16_t own_readtemp(uint8_t portnum, int16_t *temp, int16_t *t_frac); int16_t own_readtemp(uint8_t portnum, int16_t * temp, int16_t * t_frac);
/* 0 = success, -1 = error */ /* 0 = success, -1 = error */
int8_t get_persistent_mac(uint8_t portnum, uint8_t* mac); int8_t get_persistent_mac(uint8_t portnum, uint8_t * mac);
int8_t set_persistent_mac(uint8_t portnum, uint8_t* mac); int8_t set_persistent_mac(uint8_t portnum, uint8_t * mac);
#endif #endif
...@@ -19,10 +19,9 @@ int shw_pps_gen_busy(); ...@@ -19,10 +19,9 @@ int shw_pps_gen_busy();
int shw_pps_gen_enable_output(int enable); int shw_pps_gen_enable_output(int enable);
/* Reads the current time and stores at <seconds,nanoseconds>. */ /* Reads the current time and stores at <seconds,nanoseconds>. */
void shw_pps_gen_get_time(uint64_t *seconds, uint32_t *nanoseconds); void shw_pps_gen_get_time(uint64_t * seconds, uint32_t * nanoseconds);
/* Sets the time to <seconds,nanoseconds>. */ /* Sets the time to <seconds,nanoseconds>. */
void shw_pps_gen_set_time(uint64_t seconds, uint32_t nanoseconds); void shw_pps_gen_set_time(uint64_t seconds, uint32_t nanoseconds);
#endif #endif
...@@ -12,4 +12,3 @@ int sfp_present(); ...@@ -12,4 +12,3 @@ int sfp_present();
int sfp_read_part_id(char *part_id); int sfp_read_part_id(char *part_id);
#endif #endif
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
extern int wrc_ui_mode; extern int wrc_ui_mode;
const char* fromhex(const char* hex, int* v); const char *fromhex(const char *hex, int *v);
const char* fromdec(const char* dec, int* v); const char *fromdec(const char *dec, int *v);
int cmd_gui(const char *args[]); int cmd_gui(const char *args[]);
int cmd_pll(const char *args[]); int cmd_pll(const char *args[]);
...@@ -25,7 +25,6 @@ int cmd_sdb(const char *args[]); ...@@ -25,7 +25,6 @@ int cmd_sdb(const char *args[]);
int cmd_mac(const char *args[]); int cmd_mac(const char *args[]);
int cmd_init(const char *args[]); int cmd_init(const char *args[]);
int cmd_env(const char *args[]); int cmd_env(const char *args[]);
int cmd_saveenv(const char *args[]); int cmd_saveenv(const char *args[]);
int cmd_set(const char *args[]); int cmd_set(const char *args[]);
...@@ -40,4 +39,3 @@ void shell_interactive(); ...@@ -40,4 +39,3 @@ void shell_interactive();
int shell_boot_script(void); int shell_boot_script(void);
#endif #endif
...@@ -6,7 +6,6 @@ WARNING: These parameters must be in sync with the generics of the HDL instantia ...@@ -6,7 +6,6 @@ WARNING: These parameters must be in sync with the generics of the HDL instantia
*/ */
#include <stdio.h> #include <stdio.h>
/* Reference clock frequency, in [Hz] */ /* Reference clock frequency, in [Hz] */
......
...@@ -6,14 +6,13 @@ ...@@ -6,14 +6,13 @@
#include "board.h" #include "board.h"
#include <hw/wrc_syscon_regs.h> #include <hw/wrc_syscon_regs.h>
struct SYSCON_WB struct SYSCON_WB {
{ uint32_t RSTR; /*Syscon Reset Register */
uint32_t RSTR; /*Syscon Reset Register*/ uint32_t GPSR; /*GPIO Set/Readback Register */
uint32_t GPSR; /*GPIO Set/Readback Register*/ uint32_t GPCR; /*GPIO Clear Register */
uint32_t GPCR; /*GPIO Clear Register*/ uint32_t HWFR; /*Hardware Feature Register */
uint32_t HWFR; /*Hardware Feature Register*/ uint32_t TCR; /*Timer Control Register */
uint32_t TCR; /*Timer Control Register*/ uint32_t TVR; /*Timer Counter Value Register */
uint32_t TVR; /*Timer Counter Value Register*/
}; };
/*GPIO pins*/ /*GPIO pins*/
...@@ -26,8 +25,7 @@ struct SYSCON_WB ...@@ -26,8 +25,7 @@ struct SYSCON_WB
#define WRPC_FMC_I2C 0 #define WRPC_FMC_I2C 0
#define WRPC_SFP_I2C 1 #define WRPC_SFP_I2C 1
struct s_i2c_if struct s_i2c_if {
{
uint32_t scl; uint32_t scl;
uint32_t sda; uint32_t sda;
}; };
...@@ -45,7 +43,7 @@ extern volatile struct SYSCON_WB *syscon; ...@@ -45,7 +43,7 @@ extern volatile struct SYSCON_WB *syscon;
***************************/ ***************************/
static inline void gpio_out(int pin, int val) static inline void gpio_out(int pin, int val)
{ {
if(val) if (val)
syscon->GPSR = pin; syscon->GPSR = pin;
else else
syscon->GPCR = pin; syscon->GPCR = pin;
...@@ -53,7 +51,7 @@ static inline void gpio_out(int pin, int val) ...@@ -53,7 +51,7 @@ static inline void gpio_out(int pin, int val)
static inline int gpio_in(int pin) static inline int gpio_in(int pin)
{ {
return syscon->GPSR & pin ? 1: 0; return syscon->GPSR & pin ? 1 : 0;
} }
static inline int sysc_get_memsize() static inline int sysc_get_memsize()
...@@ -62,4 +60,3 @@ static inline int sysc_get_memsize() ...@@ -62,4 +60,3 @@ static inline int sysc_get_memsize()
} }
#endif #endif
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "ipv4.h" #include "ipv4.h"
#include "ptpd_netif.h" #include "ptpd_netif.h"
static wr_socket_t* arp_socket; static wr_socket_t *arp_socket;
#define ARP_HTYPE 0 #define ARP_HTYPE 0
#define ARP_PTYPE (ARP_HTYPE+2) #define ARP_PTYPE (ARP_HTYPE+2)
...@@ -16,7 +16,8 @@ static wr_socket_t* arp_socket; ...@@ -16,7 +16,8 @@ static wr_socket_t* arp_socket;
#define ARP_TPA (ARP_THA+6) #define ARP_TPA (ARP_THA+6)
#define ARP_END (ARP_TPA+4) #define ARP_END (ARP_TPA+4)
void arp_init(const char* if_name) { void arp_init(const char *if_name)
{
wr_sockaddr_t saddr; wr_sockaddr_t saddr;
/* Configure socket filter */ /* Configure socket filter */
...@@ -26,57 +27,62 @@ void arp_init(const char* if_name) { ...@@ -26,57 +27,62 @@ void arp_init(const char* if_name) {
saddr.ethertype = htons(0x0806); /* ARP */ saddr.ethertype = htons(0x0806); /* ARP */
saddr.family = PTPD_SOCK_RAW_ETHERNET; saddr.family = PTPD_SOCK_RAW_ETHERNET;
arp_socket = ptpd_netif_create_socket(PTPD_SOCK_RAW_ETHERNET, 0, &saddr); arp_socket = ptpd_netif_create_socket(PTPD_SOCK_RAW_ETHERNET,
0, &saddr);
} }
static int process_arp(uint8_t* buf, int len) { static int process_arp(uint8_t * buf, int len)
{
uint8_t hisMAC[6]; uint8_t hisMAC[6];
uint8_t hisIP[4]; uint8_t hisIP[4];
uint8_t myIP[4]; uint8_t myIP[4];
if (len < ARP_END) return 0; if (len < ARP_END)
return 0;
/* Is it ARP request targetting our IP? */ /* Is it ARP request targetting our IP? */
getIP(myIP); getIP(myIP);
if (buf[ARP_OPER+0] != 0 || if (buf[ARP_OPER + 0] != 0 ||
buf[ARP_OPER+1] != 1 || buf[ARP_OPER + 1] != 1 || memcmp(buf + ARP_TPA, myIP, 4))
memcmp(buf+ARP_TPA, myIP, 4))
return 0; return 0;
memcpy(hisMAC, buf+ARP_SHA, 6); memcpy(hisMAC, buf + ARP_SHA, 6);
memcpy(hisIP, buf+ARP_SPA, 4); memcpy(hisIP, buf + ARP_SPA, 4);
// ------------- ARP ------------ // ------------- ARP ------------
// HW ethernet // HW ethernet
buf[ARP_HTYPE+0] = 0; buf[ARP_HTYPE + 0] = 0;
buf[ARP_HTYPE+1] = 1; buf[ARP_HTYPE + 1] = 1;
// proto IP // proto IP
buf[ARP_PTYPE+0] = 8; buf[ARP_PTYPE + 0] = 8;
buf[ARP_PTYPE+1] = 0; buf[ARP_PTYPE + 1] = 0;
// lengths // lengths
buf[ARP_HLEN] = 6; buf[ARP_HLEN] = 6;
buf[ARP_PLEN] = 4; buf[ARP_PLEN] = 4;
// Response // Response
buf[ARP_OPER+0] = 0; buf[ARP_OPER + 0] = 0;
buf[ARP_OPER+1] = 2; buf[ARP_OPER + 1] = 2;
// my MAC+IP // my MAC+IP
get_mac_addr(buf+ARP_SHA); get_mac_addr(buf + ARP_SHA);
memcpy(buf+ARP_SPA, myIP, 4); memcpy(buf + ARP_SPA, myIP, 4);
// his MAC+IP // his MAC+IP
memcpy(buf+ARP_THA, hisMAC, 6); memcpy(buf + ARP_THA, hisMAC, 6);
memcpy(buf+ARP_TPA, hisIP, 4); memcpy(buf + ARP_TPA, hisIP, 4);
return ARP_END; return ARP_END;
} }
void arp_poll(void) { void arp_poll(void)
uint8_t buf[ARP_END+100]; {
uint8_t buf[ARP_END + 100];
wr_sockaddr_t addr; wr_sockaddr_t addr;
int len; int len;
if (needIP) return; /* can't do ARP w/o an address... */ if (needIP)
return; /* can't do ARP w/o an address... */
if ((len = ptpd_netif_recvfrom(arp_socket, &addr, buf, sizeof(buf), 0)) > 0) if ((len = ptpd_netif_recvfrom(arp_socket,
&addr, buf, sizeof(buf), 0)) > 0)
if ((len = process_arp(buf, len)) > 0) if ((len = process_arp(buf, len)) > 0)
ptpd_netif_sendto(arp_socket, &addr, buf, len, 0); ptpd_netif_sendto(arp_socket, &addr, buf, len, 0);
} }
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
#define ARP_H #define ARP_H
void arp_poll(); void arp_poll();
void arp_init(const char* if_name, uint32_t ip); void arp_init(const char *if_name, uint32_t ip);
#endif #endif
...@@ -43,7 +43,8 @@ ...@@ -43,7 +43,8 @@
#define BOOTP_VEND (BOOTP_FILE+128) #define BOOTP_VEND (BOOTP_FILE+128)
#define BOOTP_END (BOOTP_VEND+64) #define BOOTP_END (BOOTP_VEND+64)
int send_bootp(uint8_t* buf, int retry) { int send_bootp(uint8_t * buf, int retry)
{
unsigned short sum; unsigned short sum;
// ----------- BOOTP ------------ // ----------- BOOTP ------------
...@@ -53,93 +54,102 @@ int send_bootp(uint8_t* buf, int retry) { ...@@ -53,93 +54,102 @@ int send_bootp(uint8_t* buf, int retry) {
buf[BOOTP_HOPS] = 0; buf[BOOTP_HOPS] = 0;
/* A unique identifier for the request !!! FIXME */ /* A unique identifier for the request !!! FIXME */
get_mac_addr(buf+BOOTP_XID); get_mac_addr(buf + BOOTP_XID);
buf[BOOTP_XID+0] ^= buf[BOOTP_XID+4]; buf[BOOTP_XID + 0] ^= buf[BOOTP_XID + 4];
buf[BOOTP_XID+1] ^= buf[BOOTP_XID+5]; buf[BOOTP_XID + 1] ^= buf[BOOTP_XID + 5];
buf[BOOTP_XID+2] ^= (retry >> 8) & 0xFF; buf[BOOTP_XID + 2] ^= (retry >> 8) & 0xFF;
buf[BOOTP_XID+3] ^= retry & 0xFF; buf[BOOTP_XID + 3] ^= retry & 0xFF;
buf[BOOTP_SECS] = (retry >> 8) & 0xFF; buf[BOOTP_SECS] = (retry >> 8) & 0xFF;
buf[BOOTP_SECS+1] = retry & 0xFF; buf[BOOTP_SECS + 1] = retry & 0xFF;
memset(buf+BOOTP_UNUSED, 0, 2); memset(buf + BOOTP_UNUSED, 0, 2);
memset(buf+BOOTP_CIADDR, 0, 4); /* own IP if known */ memset(buf + BOOTP_CIADDR, 0, 4); /* own IP if known */
memset(buf+BOOTP_YIADDR, 0, 4); memset(buf + BOOTP_YIADDR, 0, 4);
memset(buf+BOOTP_SIADDR, 0, 4); memset(buf + BOOTP_SIADDR, 0, 4);
memset(buf+BOOTP_GIADDR, 0, 4); memset(buf + BOOTP_GIADDR, 0, 4);
memset(buf+BOOTP_CHADDR, 0, 16); memset(buf + BOOTP_CHADDR, 0, 16);
get_mac_addr(buf+BOOTP_CHADDR); /* own MAC address */ get_mac_addr(buf + BOOTP_CHADDR); /* own MAC address */
memset(buf+BOOTP_SNAME, 0, 64); /* desired BOOTP server */ memset(buf + BOOTP_SNAME, 0, 64); /* desired BOOTP server */
memset(buf+BOOTP_FILE, 0, 128); /* desired BOOTP file */ memset(buf + BOOTP_FILE, 0, 128); /* desired BOOTP file */
memset(buf+BOOTP_VEND, 0, 64); /* vendor extensions */ memset(buf + BOOTP_VEND, 0, 64); /* vendor extensions */
// ------------ UDP ------------- // ------------ UDP -------------
memset(buf+UDP_VIRT_SADDR, 0, 4); memset(buf + UDP_VIRT_SADDR, 0, 4);
memset(buf+UDP_VIRT_DADDR, 0xFF, 4); memset(buf + UDP_VIRT_DADDR, 0xFF, 4);
buf[UDP_VIRT_ZEROS] = 0; buf[UDP_VIRT_ZEROS] = 0;
buf[UDP_VIRT_PROTO] = 0x11; /* UDP */ buf[UDP_VIRT_PROTO] = 0x11; /* UDP */
buf[UDP_VIRT_LENGTH] = (BOOTP_END-IP_END) >> 8; buf[UDP_VIRT_LENGTH] = (BOOTP_END - IP_END) >> 8;
buf[UDP_VIRT_LENGTH+1] = (BOOTP_END-IP_END) & 0xff; buf[UDP_VIRT_LENGTH + 1] = (BOOTP_END - IP_END) & 0xff;
buf[UDP_SPORT] = 0; buf[UDP_SPORT] = 0;
buf[UDP_SPORT+1] = 68; /* BOOTP client */ buf[UDP_SPORT + 1] = 68; /* BOOTP client */
buf[UDP_DPORT] = 0; buf[UDP_DPORT] = 0;
buf[UDP_DPORT+1] = 67; /* BOOTP server */ buf[UDP_DPORT + 1] = 67; /* BOOTP server */
buf[UDP_LENGTH] = (BOOTP_END-IP_END) >> 8; buf[UDP_LENGTH] = (BOOTP_END - IP_END) >> 8;
buf[UDP_LENGTH+1] = (BOOTP_END-IP_END) & 0xff; buf[UDP_LENGTH + 1] = (BOOTP_END - IP_END) & 0xff;
buf[UDP_CHECKSUM] = 0; buf[UDP_CHECKSUM] = 0;
buf[UDP_CHECKSUM+1] = 0; buf[UDP_CHECKSUM + 1] = 0;
sum = ipv4_checksum((unsigned short*)(buf+UDP_VIRT_SADDR), (BOOTP_END-UDP_VIRT_SADDR)/2); sum =
if (sum == 0) sum = 0xFFFF; ipv4_checksum((unsigned short *)(buf + UDP_VIRT_SADDR),
(BOOTP_END - UDP_VIRT_SADDR) / 2);
if (sum == 0)
sum = 0xFFFF;
buf[UDP_CHECKSUM+0] = (sum >> 8); buf[UDP_CHECKSUM + 0] = (sum >> 8);
buf[UDP_CHECKSUM+1] = sum & 0xff; buf[UDP_CHECKSUM + 1] = sum & 0xff;
// ------------ IP -------------- // ------------ IP --------------
buf[IP_VERSION] = 0x45; buf[IP_VERSION] = 0x45;
buf[IP_TOS] = 0; buf[IP_TOS] = 0;
buf[IP_LEN+0] = (BOOTP_END) >> 8; buf[IP_LEN + 0] = (BOOTP_END) >> 8;
buf[IP_LEN+1] = (BOOTP_END) & 0xff; buf[IP_LEN + 1] = (BOOTP_END) & 0xff;
buf[IP_ID+0] = 0; buf[IP_ID + 0] = 0;
buf[IP_ID+1] = 0; buf[IP_ID + 1] = 0;
buf[IP_FLAGS+0] = 0; buf[IP_FLAGS + 0] = 0;
buf[IP_FLAGS+1] = 0; buf[IP_FLAGS + 1] = 0;
buf[IP_TTL] = 63; buf[IP_TTL] = 63;
buf[IP_PROTOCOL] = 17; /* UDP */ buf[IP_PROTOCOL] = 17; /* UDP */
buf[IP_CHECKSUM+0] = 0; buf[IP_CHECKSUM + 0] = 0;
buf[IP_CHECKSUM+1] = 0; buf[IP_CHECKSUM + 1] = 0;
memset(buf+IP_SOURCE, 0, 4); memset(buf + IP_SOURCE, 0, 4);
memset(buf+IP_DEST, 0xFF, 4); memset(buf + IP_DEST, 0xFF, 4);
sum = ipv4_checksum((unsigned short*)(buf+IP_VERSION), (IP_END-IP_VERSION)/2); sum =
buf[IP_CHECKSUM+0] = sum >> 8; ipv4_checksum((unsigned short *)(buf + IP_VERSION),
buf[IP_CHECKSUM+1] = sum & 0xff; (IP_END - IP_VERSION) / 2);
buf[IP_CHECKSUM + 0] = sum >> 8;
buf[IP_CHECKSUM + 1] = sum & 0xff;
mprintf("Sending BOOTP request...\n"); mprintf("Sending BOOTP request...\n");
return BOOTP_END; return BOOTP_END;
} }
int process_bootp(uint8_t* buf, int len) int process_bootp(uint8_t * buf, int len)
{ {
uint8_t mac[6]; uint8_t mac[6];
get_mac_addr(mac); get_mac_addr(mac);
if (len != BOOTP_END) return 0; if (len != BOOTP_END)
return 0;
if (buf[IP_VERSION] != 0x45) return 0; if (buf[IP_VERSION] != 0x45)
return 0;
if (buf[IP_PROTOCOL] != 17 || if (buf[IP_PROTOCOL] != 17 ||
buf[UDP_DPORT] != 0 || buf[UDP_DPORT+1] != 68 || buf[UDP_DPORT] != 0 || buf[UDP_DPORT + 1] != 68 ||
buf[UDP_SPORT] != 0 || buf[UDP_SPORT+1] != 67) return 0; buf[UDP_SPORT] != 0 || buf[UDP_SPORT + 1] != 67)
return 0;
if (memcmp(buf+BOOTP_CHADDR, mac, 6)) return 0; if (memcmp(buf + BOOTP_CHADDR, mac, 6))
return 0;
mprintf("Discovered IP address!\n"); mprintf("Discovered IP address!\n");
setIP(buf+BOOTP_YIADDR); setIP(buf + BOOTP_YIADDR);
return 1; return 1;
} }
...@@ -20,7 +20,8 @@ ...@@ -20,7 +20,8 @@
#define ICMP_CHECKSUM (ICMP_CODE+1) #define ICMP_CHECKSUM (ICMP_CODE+1)
#define ICMP_END (ICMP_CHECKSUM+2) #define ICMP_END (ICMP_CHECKSUM+2)
int process_icmp(uint8_t* buf, int len) { int process_icmp(uint8_t * buf, int len)
{
int iplen, hisBodyLen; int iplen, hisBodyLen;
uint8_t hisIP[4]; uint8_t hisIP[4];
uint8_t myIP[4]; uint8_t myIP[4];
...@@ -28,51 +29,53 @@ int process_icmp(uint8_t* buf, int len) { ...@@ -28,51 +29,53 @@ int process_icmp(uint8_t* buf, int len) {
/* Is it IP targetting us? */ /* Is it IP targetting us? */
getIP(myIP); getIP(myIP);
if (buf[IP_VERSION] != 0x45 || if (buf[IP_VERSION] != 0x45 || memcmp(buf + IP_DEST, myIP, 4))
memcmp(buf+IP_DEST, myIP, 4))
return 0; return 0;
iplen = (buf[IP_LEN+0] << 8 | buf[IP_LEN+1]); iplen = (buf[IP_LEN + 0] << 8 | buf[IP_LEN + 1]);
/* An ICMP ECHO request? */ /* An ICMP ECHO request? */
if (buf[IP_PROTOCOL] != 0x01 || buf[ICMP_TYPE] != 0x08) if (buf[IP_PROTOCOL] != 0x01 || buf[ICMP_TYPE] != 0x08)
return 0; return 0;
hisBodyLen = iplen - 24; hisBodyLen = iplen - 24;
if (hisBodyLen > 64) hisBodyLen = 64; if (hisBodyLen > 64)
hisBodyLen = 64;
memcpy(hisIP, buf+IP_SOURCE, 4); memcpy(hisIP, buf + IP_SOURCE, 4);
// ------------ IP -------------- // ------------ IP --------------
buf[IP_VERSION] = 0x45; buf[IP_VERSION] = 0x45;
buf[IP_TOS] = 0; buf[IP_TOS] = 0;
buf[IP_LEN+0] = (hisBodyLen+24) >> 8; buf[IP_LEN + 0] = (hisBodyLen + 24) >> 8;
buf[IP_LEN+1] = (hisBodyLen+24) & 0xff; buf[IP_LEN + 1] = (hisBodyLen + 24) & 0xff;
buf[IP_ID+0] = 0; buf[IP_ID + 0] = 0;
buf[IP_ID+1] = 0; buf[IP_ID + 1] = 0;
buf[IP_FLAGS+0] = 0; buf[IP_FLAGS + 0] = 0;
buf[IP_FLAGS+1] = 0; buf[IP_FLAGS + 1] = 0;
buf[IP_TTL] = 63; buf[IP_TTL] = 63;
buf[IP_PROTOCOL] = 1; /* ICMP */ buf[IP_PROTOCOL] = 1; /* ICMP */
buf[IP_CHECKSUM+0] = 0; buf[IP_CHECKSUM + 0] = 0;
buf[IP_CHECKSUM+1] = 0; buf[IP_CHECKSUM + 1] = 0;
memcpy(buf+IP_SOURCE, myIP, 4); memcpy(buf + IP_SOURCE, myIP, 4);
memcpy(buf+IP_DEST, hisIP, 4); memcpy(buf + IP_DEST, hisIP, 4);
// ------------ ICMP --------- // ------------ ICMP ---------
buf[ICMP_TYPE] = 0x0; // echo reply buf[ICMP_TYPE] = 0x0; // echo reply
buf[ICMP_CODE] = 0; buf[ICMP_CODE] = 0;
buf[ICMP_CHECKSUM+0] = 0; buf[ICMP_CHECKSUM + 0] = 0;
buf[ICMP_CHECKSUM+1] = 0; buf[ICMP_CHECKSUM + 1] = 0;
// No need to copy payload; we modified things in-place // No need to copy payload; we modified things in-place
sum = ipv4_checksum((unsigned short*)(buf+ICMP_TYPE), (hisBodyLen+4+1)/2); sum =
buf[ICMP_CHECKSUM+0] = sum >> 8; ipv4_checksum((unsigned short *)(buf + ICMP_TYPE),
buf[ICMP_CHECKSUM+1] = sum & 0xff; (hisBodyLen + 4 + 1) / 2);
buf[ICMP_CHECKSUM + 0] = sum >> 8;
buf[ICMP_CHECKSUM + 1] = sum & 0xff;
sum = ipv4_checksum((unsigned short*)(buf+IP_VERSION), 10); sum = ipv4_checksum((unsigned short *)(buf + IP_VERSION), 10);
buf[IP_CHECKSUM+0] = sum >> 8; buf[IP_CHECKSUM + 0] = sum >> 8;
buf[IP_CHECKSUM+1] = sum & 0xff; buf[IP_CHECKSUM + 1] = sum & 0xff;
return 24+hisBodyLen; return 24 + hisBodyLen;
} }
...@@ -8,9 +8,10 @@ ...@@ -8,9 +8,10 @@
int needIP = 1; int needIP = 1;
static uint8_t myIP[4]; static uint8_t myIP[4];
static wr_socket_t* ipv4_socket; static wr_socket_t *ipv4_socket;
unsigned int ipv4_checksum(unsigned short* buf, int shorts) { unsigned int ipv4_checksum(unsigned short *buf, int shorts)
{
int i; int i;
unsigned int sum; unsigned int sum;
...@@ -24,7 +25,8 @@ unsigned int ipv4_checksum(unsigned short* buf, int shorts) { ...@@ -24,7 +25,8 @@ unsigned int ipv4_checksum(unsigned short* buf, int shorts) {
return (~sum & 0xffff); return (~sum & 0xffff);
} }
void ipv4_init(const char* if_name) { void ipv4_init(const char *if_name)
{
wr_sockaddr_t saddr; wr_sockaddr_t saddr;
/* Configure socket filter */ /* Configure socket filter */
...@@ -34,22 +36,25 @@ void ipv4_init(const char* if_name) { ...@@ -34,22 +36,25 @@ void ipv4_init(const char* if_name) {
saddr.ethertype = htons(0x0800); /* IPv4 */ saddr.ethertype = htons(0x0800); /* IPv4 */
saddr.family = PTPD_SOCK_RAW_ETHERNET; saddr.family = PTPD_SOCK_RAW_ETHERNET;
ipv4_socket = ptpd_netif_create_socket(PTPD_SOCK_RAW_ETHERNET, 0, &saddr); ipv4_socket = ptpd_netif_create_socket(PTPD_SOCK_RAW_ETHERNET,
0, &saddr);
} }
static int bootp_retry = 0; static int bootp_retry = 0;
static int bootp_timer = 0; static int bootp_timer = 0;
void ipv4_poll(void) { void ipv4_poll(void)
{
uint8_t buf[400]; uint8_t buf[400];
wr_sockaddr_t addr; wr_sockaddr_t addr;
int len; int len;
if ((len = ptpd_netif_recvfrom(ipv4_socket, &addr, buf, sizeof(buf), 0)) > 0) { if ((len = ptpd_netif_recvfrom(ipv4_socket, &addr,
buf, sizeof(buf), 0)) > 0) {
if (needIP) if (needIP)
process_bootp(buf, len-14); process_bootp(buf, len - 14);
if (!needIP && (len = process_icmp(buf, len-14)) > 0) if (!needIP && (len = process_icmp(buf, len - 14)) > 0)
ptpd_netif_sendto(ipv4_socket, &addr, buf, len, 0); ptpd_netif_sendto(ipv4_socket, &addr, buf, len, 0);
} }
...@@ -61,24 +66,26 @@ void ipv4_poll(void) { ...@@ -61,24 +66,26 @@ void ipv4_poll(void) {
ptpd_netif_sendto(ipv4_socket, &addr, buf, len, 0); ptpd_netif_sendto(ipv4_socket, &addr, buf, len, 0);
} }
if (needIP && ++bootp_timer == 100000) bootp_timer = 0; if (needIP && ++bootp_timer == 100000)
bootp_timer = 0;
} }
void getIP(unsigned char* IP) { void getIP(unsigned char *IP)
{
memcpy(IP, myIP, 4); memcpy(IP, myIP, 4);
} }
void setIP(unsigned char* IP) { void setIP(unsigned char *IP)
{
volatile unsigned int *eb_ip = volatile unsigned int *eb_ip =
(unsigned int*)(BASE_ETHERBONE_CFG + EB_IPV4); (unsigned int *)(BASE_ETHERBONE_CFG + EB_IPV4);
unsigned int ip; unsigned int ip;
memcpy(myIP, IP, 4); memcpy(myIP, IP, 4);
ip = ip = (myIP[0] << 24) | (myIP[1] << 16) | (myIP[2] << 8) | (myIP[3]);
(myIP[0] << 24) | (myIP[1] << 16) | while (*eb_ip != ip)
(myIP[2] << 8) | (myIP[3]); *eb_ip = ip;
while (*eb_ip != ip) *eb_ip = ip;
needIP = (ip == 0); needIP = (ip == 0);
if (!needIP) { if (!needIP) {
......
#ifndef IPV4_H #ifndef IPV4_H
#define IPV4_H #define IPV4_H
void ipv4_init(const char* if_name); void ipv4_init(const char *if_name);
void ipv4_poll(void); void ipv4_poll(void);
/* Internal to IP stack: */ /* Internal to IP stack: */
unsigned int ipv4_checksum(unsigned short* buf, int shorts); unsigned int ipv4_checksum(unsigned short *buf, int shorts);
void arp_init(const char* if_name); void arp_init(const char *if_name);
void arp_poll(void); void arp_poll(void);
extern int needIP; extern int needIP;
void setIP(unsigned char* IP); void setIP(unsigned char *IP);
void getIP(unsigned char* IP); void getIP(unsigned char *IP);
int process_icmp(uint8_t* buf, int len); int process_icmp(uint8_t * buf, int len);
int process_bootp(uint8_t* buf, int len); /* non-zero if IP was set */ int process_bootp(uint8_t * buf, int len); /* non-zero if IP was set */
int send_bootp(uint8_t* buf, int retry); int send_bootp(uint8_t * buf, int retry);
#endif #endif
...@@ -5,33 +5,29 @@ ...@@ -5,33 +5,29 @@
#include "uart.h" #include "uart.h"
#include "util.h" #include "util.h"
int vprintf(char const *format,va_list ap) int vprintf(char const *format, va_list ap)
{ {
unsigned char scratch[16]; unsigned char scratch[16];
unsigned char format_flag; unsigned char format_flag;
unsigned int u_val=0; unsigned int u_val = 0;
unsigned char base; unsigned char base;
unsigned char *ptr; unsigned char *ptr;
unsigned char width = 0; unsigned char width = 0;
unsigned char fill; unsigned char fill;
while(1) while (1) {
{
width = 0; width = 0;
fill = ' '; fill = ' ';
while ((format_flag = *format++) != '%') while ((format_flag = *format++) != '%') {
{ if (!format_flag) {
if (!format_flag) va_end(ap);
{
va_end (ap);
return (0); return (0);
} }
uart_write_byte(format_flag); uart_write_byte(format_flag);
} }
// check for zero pad // check for zero pad
format_flag = *format - '0'; format_flag = *format - '0';
if (format_flag == 0) // zero pad if (format_flag == 0) // zero pad
...@@ -39,7 +35,6 @@ int vprintf(char const *format,va_list ap) ...@@ -39,7 +35,6 @@ int vprintf(char const *format,va_list ap)
fill = '0'; fill = '0';
format++; format++;
} }
// check for width spec // check for width spec
format_flag = *format - '0'; format_flag = *format - '0';
if (format_flag > 0 && format_flag <= 9) // width set if (format_flag > 0 && format_flag <= 9) // width set
...@@ -48,10 +43,9 @@ int vprintf(char const *format,va_list ap) ...@@ -48,10 +43,9 @@ int vprintf(char const *format,va_list ap)
format++; format++;
} }
switch (format_flag = *format++) switch (format_flag = *format++) {
{
case 'c': case 'c':
format_flag = va_arg(ap,int); format_flag = va_arg(ap, int);
//fall through //fall through
...@@ -67,8 +61,6 @@ int vprintf(char const *format,va_list ap) ...@@ -67,8 +61,6 @@ int vprintf(char const *format,va_list ap)
uart_write_byte(*ptr++); uart_write_byte(*ptr++);
continue; continue;
case 'd': case 'd':
base = 10; base = 10;
...@@ -83,20 +75,17 @@ int vprintf(char const *format,va_list ap) ...@@ -83,20 +75,17 @@ int vprintf(char const *format,va_list ap)
CONVERSION_LOOP: CONVERSION_LOOP:
u_val = va_arg(ap,unsigned int); u_val = va_arg(ap, unsigned int);
if((format_flag=='d') && (u_val&0x80000000)) if ((format_flag == 'd') && (u_val & 0x80000000)) {
{
uart_write_byte('-'); uart_write_byte('-');
u_val=-u_val; u_val = -u_val;
} }
ptr = scratch + 16; ptr = scratch + 16;
*--ptr = 0; *--ptr = 0;
do do {
{
char ch = (u_val % base) + '0'; char ch = (u_val % base) + '0';
if (ch > '9') if (ch > '9')
ch += 'a' - '9' - 1; ch += 'a' - '9' - 1;
...@@ -108,7 +97,7 @@ CONVERSION_LOOP: ...@@ -108,7 +97,7 @@ CONVERSION_LOOP:
if (width) if (width)
width--; width--;
} while (u_val>0); } while (u_val > 0);
while (width--) while (width--)
*--ptr = fill; *--ptr = fill;
...@@ -121,35 +110,30 @@ CONVERSION_LOOP: ...@@ -121,35 +110,30 @@ CONVERSION_LOOP:
return 0; return 0;
} }
static int _p_vsprintf(char const *format, va_list ap, char *dst)
static int _p_vsprintf(char const *format,va_list ap, char*dst)
{ {
unsigned char scratch[16]; unsigned char scratch[16];
unsigned char format_flag; unsigned char format_flag;
unsigned int u_val=0; unsigned int u_val = 0;
unsigned char base; unsigned char base;
unsigned char *ptr; unsigned char *ptr;
unsigned char width = 0; unsigned char width = 0;
unsigned char fill; unsigned char fill;
while(1) while (1) {
{
width = 0; width = 0;
fill = ' '; fill = ' ';
while ((format_flag = *format++) != '%') while ((format_flag = *format++) != '%') {
{ if (!format_flag) {
if (!format_flag) va_end(ap);
{ *dst++ = 0;
va_end (ap);
*dst++=0;
return (0); return (0);
} }
*dst++=format_flag; *dst++ = format_flag;
} }
// check for zero pad // check for zero pad
format_flag = *format - '0'; format_flag = *format - '0';
if (format_flag == 0) // zero pad if (format_flag == 0) // zero pad
...@@ -157,7 +141,6 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst) ...@@ -157,7 +141,6 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst)
fill = '0'; fill = '0';
format++; format++;
} }
// check for width spec // check for width spec
format_flag = *format - '0'; format_flag = *format - '0';
if (format_flag > 0 && format_flag <= 9) // width set if (format_flag > 0 && format_flag <= 9) // width set
...@@ -166,15 +149,14 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst) ...@@ -166,15 +149,14 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst)
format++; format++;
} }
switch (format_flag = *format++) switch (format_flag = *format++) {
{
case 'c': case 'c':
format_flag = va_arg(ap,int); format_flag = va_arg(ap, int);
//fall through //fall through
default: default:
*dst++=format_flag; *dst++ = format_flag;
continue; continue;
...@@ -182,11 +164,9 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst) ...@@ -182,11 +164,9 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst)
case 's': case 's':
ptr = (unsigned char *)va_arg(ap, char *); ptr = (unsigned char *)va_arg(ap, char *);
while (*ptr) while (*ptr)
*dst++=*ptr++; *dst++ = *ptr++;
continue; continue;
case 'd': case 'd':
case 'u': case 'u':
base = 10; base = 10;
...@@ -197,14 +177,13 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst) ...@@ -197,14 +177,13 @@ static int _p_vsprintf(char const *format,va_list ap, char*dst)
CONVERSION_LOOP: CONVERSION_LOOP:
u_val = va_arg(ap,unsigned int); u_val = va_arg(ap, unsigned int);
ptr = scratch + 16; ptr = scratch + 16;
*--ptr = 0; *--ptr = 0;
do do {
{
char ch = (u_val % base) + '0'; char ch = (u_val % base) + '0';
if (ch > '9') if (ch > '9')
ch += 'a' - '9' - 1; ch += 'a' - '9' - 1;
...@@ -216,17 +195,17 @@ CONVERSION_LOOP: ...@@ -216,17 +195,17 @@ CONVERSION_LOOP:
if (width) if (width)
width--; width--;
} while (u_val>0); } while (u_val > 0);
// while (width--) // while (width--)
// *--ptr = fill; // *--ptr = fill;
while (*ptr) while (*ptr)
*dst++=*ptr++; *dst++ = *ptr++;
} }
} }
*dst++=0; *dst++ = 0;
return 0; return 0;
} }
...@@ -234,8 +213,8 @@ int mprintf(char const *format, ...) ...@@ -234,8 +213,8 @@ int mprintf(char const *format, ...)
{ {
int rval; int rval;
va_list ap; va_list ap;
va_start (ap, format); va_start(ap, format);
rval = vprintf(format,ap); rval = vprintf(format, ap);
va_end(ap); va_end(ap);
return rval; return rval;
...@@ -244,8 +223,8 @@ int mprintf(char const *format, ...) ...@@ -244,8 +223,8 @@ int mprintf(char const *format, ...)
int sprintf(char *dst, char const *format, ...) int sprintf(char *dst, char const *format, ...)
{ {
va_list ap; va_list ap;
va_start (ap, format); va_start(ap, format);
int r= _p_vsprintf(format,ap,dst); int r = _p_vsprintf(format, ap, dst);
return r; return r;
} }
...@@ -30,8 +30,8 @@ static const char *_months[] = { ...@@ -30,8 +30,8 @@ static const char *_months[] = {
}; };
static const int _ytab[2][12] = { static const int _ytab[2][12] = {
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
}; };
char *format_time(uint64_t sec) char *format_time(uint64_t sec)
...@@ -62,17 +62,17 @@ char *format_time(uint64_t sec) ...@@ -62,17 +62,17 @@ char *format_time(uint64_t sec)
t.tm_mday = dayno + 1; t.tm_mday = dayno + 1;
t.tm_isdst = 0; t.tm_isdst = 0;
sprintf(buf, "%s, %s %d, %d, %2d:%2d:%2d", _days[t.tm_wday], _months[t.tm_mon], sprintf(buf, "%s, %s %d, %d, %2d:%2d:%2d", _days[t.tm_wday],
t.tm_mday, t.tm_year + YEAR0, t.tm_hour, t.tm_min, t.tm_sec); _months[t.tm_mon], t.tm_mday, t.tm_year + YEAR0, t.tm_hour,
t.tm_min, t.tm_sec);
return buf; return buf;
} }
void cprintf(int color, const char *fmt, ...) void cprintf(int color, const char *fmt, ...)
{ {
va_list ap; va_list ap;
mprintf("\033[0%d;3%dm",color & C_DIM ? 2:1, color&0x7f); mprintf("\033[0%d;3%dm", color & C_DIM ? 2 : 1, color & 0x7f);
va_start(ap, fmt); va_start(ap, fmt);
vprintf(fmt, ap); vprintf(fmt, ap);
va_end(ap); va_end(ap);
...@@ -82,7 +82,7 @@ void pcprintf(int row, int col, int color, const char *fmt, ...) ...@@ -82,7 +82,7 @@ void pcprintf(int row, int col, int color, const char *fmt, ...)
{ {
va_list ap; va_list ap;
mprintf("\033[%d;%df", row, col); mprintf("\033[%d;%df", row, col);
mprintf("\033[0%d;3%dm",color & C_DIM ? 2:1, color&0x7f); mprintf("\033[0%d;3%dm", color & C_DIM ? 2 : 1, color & 0x7f);
va_start(ap, fmt); va_start(ap, fmt);
vprintf(fmt, ap); vprintf(fmt, ap);
va_end(ap); va_end(ap);
......
...@@ -17,7 +17,10 @@ extern int wrc_man_phase; ...@@ -17,7 +17,10 @@ extern int wrc_man_phase;
int wrc_mon_gui(void) int wrc_mon_gui(void)
{ {
static char* slave_states[] = {"Uninitialized", "SYNC_SEC", "SYNC_NSEC", "SYNC_PHASE", "TRACK_PHASE"}; static char *slave_states[] = {
"Uninitialized", "SYNC_SEC", "SYNC_NSEC", "SYNC_PHASE",
"TRACK_PHASE"
};
static uint32_t last = 0; static uint32_t last = 0;
hexp_port_state_t ps; hexp_port_state_t ps;
int tx, rx; int tx, rx;
...@@ -25,7 +28,7 @@ int wrc_mon_gui(void) ...@@ -25,7 +28,7 @@ int wrc_mon_gui(void)
uint64_t sec; uint64_t sec;
uint32_t nsec; uint32_t nsec;
if(timer_get_tics() - last < UI_REFRESH_PERIOD) if (timer_get_tics() - last < UI_REFRESH_PERIOD)
return 0; return 0;
last = timer_get_tics(); last = timer_get_tics();
...@@ -40,72 +43,108 @@ int wrc_mon_gui(void) ...@@ -40,72 +43,108 @@ int wrc_mon_gui(void)
cprintf(C_BLUE, "\n\nTAI Time: "); cprintf(C_BLUE, "\n\nTAI Time: ");
cprintf(C_WHITE, "%s", format_time(sec)); cprintf(C_WHITE, "%s", format_time(sec));
/*show_ports*/ /*show_ports */
halexp_get_port_state(&ps, NULL); halexp_get_port_state(&ps, NULL);
pcprintf(4, 1, C_BLUE, "\n\nLink status:"); pcprintf(4, 1, C_BLUE, "\n\nLink status:");
pcprintf(6, 1, C_WHITE, "%s: ", "wru1"); pcprintf(6, 1, C_WHITE, "%s: ", "wru1");
if(ps.up) cprintf(C_GREEN, "Link up "); else cprintf(C_RED, "Link down "); if (ps.up)
cprintf(C_GREEN, "Link up ");
else
cprintf(C_RED, "Link down ");
if(ps.up) if (ps.up) {
{
minic_get_stats(&tx, &rx); minic_get_stats(&tx, &rx);
cprintf(C_GREY, "(RX: %d, TX: %d), mode: ", rx, tx); cprintf(C_GREY, "(RX: %d, TX: %d), mode: ", rx, tx);
switch(ps.mode) switch (ps.mode) {
{ case HEXP_PORT_MODE_WR_MASTER:
case HEXP_PORT_MODE_WR_MASTER:cprintf(C_WHITE, "WR Master ");break; cprintf(C_WHITE, "WR Master ");
case HEXP_PORT_MODE_WR_SLAVE:cprintf(C_WHITE, "WR Slave ");break; break;
case HEXP_PORT_MODE_WR_SLAVE:
cprintf(C_WHITE, "WR Slave ");
break;
} }
if(ps.is_locked) cprintf(C_GREEN, "Locked "); else cprintf(C_RED, "NoLock "); if (ps.is_locked)
if(ps.rx_calibrated && ps.tx_calibrated) cprintf(C_GREEN, "Calibrated "); else cprintf(C_RED, "Uncalibrated "); cprintf(C_GREEN, "Locked ");
else
cprintf(C_RED, "NoLock ");
if (ps.rx_calibrated && ps.tx_calibrated)
cprintf(C_GREEN, "Calibrated ");
else
cprintf(C_RED, "Uncalibrated ");
/* show_servo */ /* show_servo */
cprintf(C_BLUE, "\n\nSynchronization status:\n\n"); cprintf(C_BLUE, "\n\nSynchronization status:\n\n");
if(!cur_servo_state.valid) if (!cur_servo_state.valid) {
{ cprintf(C_RED,
cprintf(C_RED, "Master mode or sync info not valid\n\n"); "Master mode or sync info not valid\n\n");
return; return;
} }
cprintf(C_GREY, "Servo state: "); cprintf(C_WHITE, "%s\n", cur_servo_state.slave_servo_state); cprintf(C_GREY, "Servo state: ");
cprintf(C_GREY, "Phase tracking: "); if(cur_servo_state.tracking_enabled) cprintf(C_GREEN, "ON\n"); else cprintf(C_RED,"OFF\n"); cprintf(C_WHITE, "%s\n", cur_servo_state.slave_servo_state);
cprintf(C_GREY, "Synchronization source: "); cprintf(C_WHITE, "%s\n", cur_servo_state.sync_source); cprintf(C_GREY, "Phase tracking: ");
if (cur_servo_state.tracking_enabled)
cprintf(C_GREEN, "ON\n");
else
cprintf(C_RED, "OFF\n");
cprintf(C_GREY, "Synchronization source: ");
cprintf(C_WHITE, "%s\n", cur_servo_state.sync_source);
cprintf(C_GREY, "Aux clock status: "); cprintf(C_GREY, "Aux clock status: ");
aux_stat = spll_get_aux_status(0); aux_stat = spll_get_aux_status(0);
if(aux_stat & SPLL_AUX_ENABLED) if (aux_stat & SPLL_AUX_ENABLED)
cprintf(C_GREEN,"enabled"); cprintf(C_GREEN, "enabled");
if(aux_stat & SPLL_AUX_LOCKED) if (aux_stat & SPLL_AUX_LOCKED)
cprintf(C_GREEN,", locked"); cprintf(C_GREEN, ", locked");
mprintf("\n"); mprintf("\n");
cprintf(C_BLUE, "\nTiming parameters:\n\n"); cprintf(C_BLUE, "\nTiming parameters:\n\n");
cprintf(C_GREY, "Round-trip time (mu): "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.mu)); cprintf(C_GREY, "Round-trip time (mu): ");
cprintf(C_GREY, "Master-slave delay: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.delay_ms)); cprintf(C_WHITE, "%d ps\n", (int32_t) (cur_servo_state.mu));
cprintf(C_GREY, "Master PHY delays: "); cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n", (int32_t)cur_servo_state.delta_tx_m, (int32_t)cur_servo_state.delta_rx_m); cprintf(C_GREY, "Master-slave delay: ");
cprintf(C_GREY, "Slave PHY delays: "); cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n", (int32_t)cur_servo_state.delta_tx_s, (int32_t)cur_servo_state.delta_rx_s); cprintf(C_WHITE, "%d ps\n",
cprintf(C_GREY, "Total link asymmetry: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.total_asymmetry)); (int32_t) (cur_servo_state.delay_ms));
cprintf(C_GREY, "Cable rtt delay: "); cprintf(C_WHITE, "%d ps\n", cprintf(C_GREY, "Master PHY delays: ");
(int32_t)(cur_servo_state.mu) - (int32_t)cur_servo_state.delta_tx_m - (int32_t)cur_servo_state.delta_rx_m - cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n",
(int32_t)cur_servo_state.delta_tx_s - (int32_t)cur_servo_state.delta_rx_s); (int32_t) cur_servo_state.delta_tx_m,
cprintf(C_GREY, "Clock offset: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.cur_offset)); (int32_t) cur_servo_state.delta_rx_m);
cprintf(C_GREY, "Phase setpoint: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.cur_setpoint)); cprintf(C_GREY, "Slave PHY delays: ");
cprintf(C_GREY, "Skew: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(cur_servo_state.cur_skew)); cprintf(C_WHITE, "TX: %d ps, RX: %d ps\n",
cprintf(C_GREY, "Manual phase adjustment: "); cprintf(C_WHITE, "%d ps\n", (int32_t)(wrc_man_phase)); (int32_t) cur_servo_state.delta_tx_s,
(int32_t) cur_servo_state.delta_rx_s);
cprintf(C_GREY, "Update counter: "); cprintf(C_WHITE, "%d \n", (int32_t)(cur_servo_state.update_count)); cprintf(C_GREY, "Total link asymmetry: ");
cprintf(C_WHITE, "%d ps\n",
(int32_t) (cur_servo_state.total_asymmetry));
cprintf(C_GREY, "Cable rtt delay: ");
cprintf(C_WHITE, "%d ps\n",
(int32_t) (cur_servo_state.mu) -
(int32_t) cur_servo_state.delta_tx_m -
(int32_t) cur_servo_state.delta_rx_m -
(int32_t) cur_servo_state.delta_tx_s -
(int32_t) cur_servo_state.delta_rx_s);
cprintf(C_GREY, "Clock offset: ");
cprintf(C_WHITE, "%d ps\n",
(int32_t) (cur_servo_state.cur_offset));
cprintf(C_GREY, "Phase setpoint: ");
cprintf(C_WHITE, "%d ps\n",
(int32_t) (cur_servo_state.cur_setpoint));
cprintf(C_GREY, "Skew: ");
cprintf(C_WHITE, "%d ps\n",
(int32_t) (cur_servo_state.cur_skew));
cprintf(C_GREY, "Manual phase adjustment: ");
cprintf(C_WHITE, "%d ps\n", (int32_t) (wrc_man_phase));
cprintf(C_GREY, "Update counter: ");
cprintf(C_WHITE, "%d \n",
(int32_t) (cur_servo_state.update_count));
} }
...@@ -116,7 +155,10 @@ int wrc_mon_gui(void) ...@@ -116,7 +155,10 @@ int wrc_mon_gui(void)
int wrc_log_stats(uint8_t onetime) int wrc_log_stats(uint8_t onetime)
{ {
static char* slave_states[] = {"Uninitialized", "SYNC_SEC", "SYNC_NSEC", "SYNC_PHASE", "TRACK_PHASE"}; static char *slave_states[] = {
"Uninitialized", "SYNC_SEC", "SYNC_NSEC", "SYNC_PHASE",
"TRACK_PHASE"
};
static uint32_t last = 0; static uint32_t last = 0;
hexp_port_state_t ps; hexp_port_state_t ps;
int tx, rx; int tx, rx;
...@@ -126,7 +168,7 @@ int wrc_log_stats(uint8_t onetime) ...@@ -126,7 +168,7 @@ int wrc_log_stats(uint8_t onetime)
int16_t brd_temp = 0; int16_t brd_temp = 0;
int16_t brd_temp_frac = 0; int16_t brd_temp_frac = 0;
if(!onetime && timer_get_tics() - last < UI_REFRESH_PERIOD) if (!onetime && timer_get_tics() - last < UI_REFRESH_PERIOD)
return 0; return 0;
last = timer_get_tics(); last = timer_get_tics();
...@@ -135,28 +177,30 @@ int wrc_log_stats(uint8_t onetime) ...@@ -135,28 +177,30 @@ int wrc_log_stats(uint8_t onetime)
halexp_get_port_state(&ps, NULL); halexp_get_port_state(&ps, NULL);
minic_get_stats(&tx, &rx); minic_get_stats(&tx, &rx);
mprintf("lnk:%d rx:%d tx:%d ", ps.up, rx, tx); mprintf("lnk:%d rx:%d tx:%d ", ps.up, rx, tx);
mprintf("lock:%d ", ps.is_locked?1:0); mprintf("lock:%d ", ps.is_locked ? 1 : 0);
mprintf("sv:%d ", cur_servo_state.valid?1:0); mprintf("sv:%d ", cur_servo_state.valid ? 1 : 0);
mprintf("ss:'%s' ", cur_servo_state.slave_servo_state); mprintf("ss:'%s' ", cur_servo_state.slave_servo_state);
aux_stat = spll_get_aux_status(0); aux_stat = spll_get_aux_status(0);
mprintf("aux:%x ", aux_stat); mprintf("aux:%x ", aux_stat);
mprintf("sec:%d nsec:%d ", (uint32_t) sec, nsec); /* fixme: clock is not always 125 MHz */ mprintf("sec:%d nsec:%d ", (uint32_t) sec, nsec); /* fixme: clock is not always 125 MHz */
mprintf("mu:%d ", (int32_t)cur_servo_state.mu); mprintf("mu:%d ", (int32_t) cur_servo_state.mu);
mprintf("dms:%d ", (int32_t)cur_servo_state.delay_ms); mprintf("dms:%d ", (int32_t) cur_servo_state.delay_ms);
mprintf("dtxm:%d drxm:%d ", (int32_t)cur_servo_state.delta_tx_m, (int32_t)cur_servo_state.delta_rx_m); mprintf("dtxm:%d drxm:%d ", (int32_t) cur_servo_state.delta_tx_m,
mprintf("dtxs:%d drxs:%d ", (int32_t)cur_servo_state.delta_tx_s, (int32_t)cur_servo_state.delta_rx_s); (int32_t) cur_servo_state.delta_rx_m);
mprintf("asym:%d ", (int32_t)(cur_servo_state.total_asymmetry)); mprintf("dtxs:%d drxs:%d ", (int32_t) cur_servo_state.delta_tx_s,
(int32_t) cur_servo_state.delta_rx_s);
mprintf("asym:%d ", (int32_t) (cur_servo_state.total_asymmetry));
mprintf("crtt:%d ", mprintf("crtt:%d ",
(int32_t)(cur_servo_state.mu) - (int32_t)cur_servo_state.delta_tx_m - (int32_t)cur_servo_state.delta_rx_m - (int32_t) (cur_servo_state.mu) -
(int32_t)cur_servo_state.delta_tx_s - (int32_t)cur_servo_state.delta_rx_s); (int32_t) cur_servo_state.delta_tx_m -
mprintf("cko:%d ", (int32_t)(cur_servo_state.cur_offset)); (int32_t) cur_servo_state.delta_rx_m -
mprintf("setp:%d ", (int32_t)(cur_servo_state.cur_setpoint)); (int32_t) cur_servo_state.delta_tx_s -
mprintf("hd:%d md:%d ad:%d ", (int32_t) cur_servo_state.delta_rx_s);
spll_get_dac(-1), mprintf("cko:%d ", (int32_t) (cur_servo_state.cur_offset));
spll_get_dac(0), mprintf("setp:%d ", (int32_t) (cur_servo_state.cur_setpoint));
spll_get_dac(1) mprintf("hd:%d md:%d ad:%d ", spll_get_dac(-1), spll_get_dac(0),
); spll_get_dac(1));
mprintf("ucnt:%d ", (int32_t)cur_servo_state.update_count); mprintf("ucnt:%d ", (int32_t) cur_servo_state.update_count);
own_readtemp(ONEWIRE_PORT, &brd_temp, &brd_temp_frac); own_readtemp(ONEWIRE_PORT, &brd_temp, &brd_temp_frac);
mprintf("temp:%d.%02d C", brd_temp, brd_temp_frac); mprintf("temp:%d.%02d C", brd_temp, brd_temp_frac);
......
...@@ -7,34 +7,29 @@ ...@@ -7,34 +7,29 @@
#include "eeprom.h" #include "eeprom.h"
#include "syscon.h" #include "syscon.h"
extern int measure_t24p(int *value); extern int measure_t24p(int *value);
int cmd_calib(const char *args[]) int cmd_calib(const char *args[])
{ {
uint32_t trans; uint32_t trans;
if(args[0] && !strcasecmp(args[0], "force")) if (args[0] && !strcasecmp(args[0], "force")) {
{ if (measure_t24p(&trans) < 0)
if( measure_t24p(&trans)<0 )
return -1; return -1;
return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 1); return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 1);
} } else if (!args[0]) {
else if( !args[0] ) if (eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 0) > 0) {
{ mprintf("Found phase transition in EEPROM: %dps\n",
if( eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 0) >0 ) trans);
{
mprintf("Found phase transition in EEPROM: %dps\n", trans);
cal_phase_transition = trans; cal_phase_transition = trans;
return 0; return 0;
} } else {
else
{
mprintf("Measuring t2/t4 phase transition...\n"); mprintf("Measuring t2/t4 phase transition...\n");
if( measure_t24p(&trans)<0 ) if (measure_t24p(&trans) < 0)
return -1; return -1;
cal_phase_transition = trans; cal_phase_transition = trans;
return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR, &trans, 1); return eeprom_phtrans(WRPC_FMC_I2C, FMC_EEPROM_ADR,
&trans, 1);
} }
} }
......
...@@ -3,40 +3,28 @@ ...@@ -3,40 +3,28 @@
#include "eeprom.h" #include "eeprom.h"
#include "syscon.h" #include "syscon.h"
int cmd_init(const char *args[]) int cmd_init(const char *args[])
{ {
if( !mi2c_devprobe(WRPC_FMC_I2C, FMC_EEPROM_ADR) ) if (!mi2c_devprobe(WRPC_FMC_I2C, FMC_EEPROM_ADR)) {
{
mprintf("EEPROM not found..\n"); mprintf("EEPROM not found..\n");
return -1; return -1;
} }
if(args[0] && !strcasecmp(args[0], "erase")) if (args[0] && !strcasecmp(args[0], "erase")) {
{ if (eeprom_init_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) < 0)
if( eeprom_init_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) < 0 )
mprintf("Could not erase init script\n"); mprintf("Could not erase init script\n");
} } else if (args[0] && !strcasecmp(args[0], "purge")) {
else if(args[0] && !strcasecmp(args[0], "purge"))
{
eeprom_init_purge(WRPC_FMC_I2C, FMC_EEPROM_ADR); eeprom_init_purge(WRPC_FMC_I2C, FMC_EEPROM_ADR);
} } else if (args[1] && !strcasecmp(args[0], "add")) {
else if(args[1] && !strcasecmp(args[0], "add")) if (eeprom_init_add(WRPC_FMC_I2C, FMC_EEPROM_ADR, args) < 0)
{
if( eeprom_init_add(WRPC_FMC_I2C, FMC_EEPROM_ADR, args) < 0 )
mprintf("Could not add the command\n"); mprintf("Could not add the command\n");
else else
mprintf("OK.\n"); mprintf("OK.\n");
} } else if (args[0] && !strcasecmp(args[0], "show")) {
else if(args[0] && !strcasecmp(args[0], "show"))
{
eeprom_init_show(WRPC_FMC_I2C, FMC_EEPROM_ADR); eeprom_init_show(WRPC_FMC_I2C, FMC_EEPROM_ADR);
} } else if (args[0] && !strcasecmp(args[0], "boot")) {
else if(args[0] && !strcasecmp(args[0], "boot"))
{
shell_boot_script(); shell_boot_script();
} }
return 0; return 0;
} }
...@@ -6,14 +6,16 @@ ...@@ -6,14 +6,16 @@
#include "shell.h" #include "shell.h"
#include "../lib/ipv4.h" #include "../lib/ipv4.h"
static decode_ip(const char *str, unsigned char* ip) { static decode_ip(const char *str, unsigned char *ip)
{
int i, x; int i, x;
/* Don't try to detect bad input; need small code */ /* Don't try to detect bad input; need small code */
for (i = 0; i < 4; ++i) { for (i = 0; i < 4; ++i) {
str = fromdec(str, &x); str = fromdec(str, &x);
ip[i] = x; ip[i] = x;
if (*str == '.') ++str; if (*str == '.')
++str;
} }
} }
......
...@@ -7,14 +7,16 @@ ...@@ -7,14 +7,16 @@
#include "onewire.h" #include "onewire.h"
#include "../lib/ipv4.h" #include "../lib/ipv4.h"
static decode_mac(const char *str, unsigned char* mac) { static decode_mac(const char *str, unsigned char *mac)
{
int i, x; int i, x;
/* Don't try to detect bad input; need small code */ /* Don't try to detect bad input; need small code */
for (i = 0; i < 6; ++i) { for (i = 0; i < 6; ++i) {
str = fromhex(str, &x); str = fromhex(str, &x);
mac[i] = x; mac[i] = x;
if (*str == ':') ++str; if (*str == ':')
++str;
} }
} }
......
...@@ -12,13 +12,14 @@ ...@@ -12,13 +12,14 @@
int cmd_mode(const char *args[]) int cmd_mode(const char *args[])
{ {
int mode; int mode;
static const char *modes[]={"unknown","grandmaster","master","slave"}; static const char *modes[] =
{ "unknown", "grandmaster", "master", "slave" };
if(!strcasecmp(args[0], "gm")) if (!strcasecmp(args[0], "gm"))
mode = WRC_MODE_GM; mode = WRC_MODE_GM;
else if(!strcasecmp(args[0], "master")) else if (!strcasecmp(args[0], "master"))
mode = WRC_MODE_MASTER; mode = WRC_MODE_MASTER;
else if(!strcasecmp(args[0], "slave")) else if (!strcasecmp(args[0], "slave"))
mode = WRC_MODE_SLAVE; mode = WRC_MODE_SLAVE;
else { else {
mprintf("%s\n", modes[wrc_ptp_get_mode()]); mprintf("%s\n", modes[wrc_ptp_get_mode()]);
......
...@@ -9,49 +9,41 @@ int cmd_pll(const char *args[]) ...@@ -9,49 +9,41 @@ int cmd_pll(const char *args[])
{ {
int cur, tgt; int cur, tgt;
if(!strcasecmp(args[0], "init")) if (!strcasecmp(args[0], "init")) {
{ if (!args[3])
if(!args[3])
return -EINVAL; return -EINVAL;
spll_init(atoi(args[1]), atoi(args[2]), atoi(args[3])); spll_init(atoi(args[1]), atoi(args[2]), atoi(args[3]));
} else if (!strcasecmp(args[0], "cl")) } else if (!strcasecmp(args[0], "cl")) {
{ if (!args[1])
if(!args[1])
return -EINVAL; return -EINVAL;
mprintf("%d\n", spll_check_lock(atoi(args[1]))); mprintf("%d\n", spll_check_lock(atoi(args[1])));
} else if (!strcasecmp(args[0], "sps")) } else if (!strcasecmp(args[0], "sps")) {
{ if (!args[2])
if(!args[2])
return -EINVAL; return -EINVAL;
spll_set_phase_shift(atoi(args[1]), atoi(args[2])); spll_set_phase_shift(atoi(args[1]), atoi(args[2]));
} else if (!strcasecmp(args[0], "gps")) } else if (!strcasecmp(args[0], "gps")) {
{ if (!args[1])
if(!args[1])
return -EINVAL; return -EINVAL;
spll_get_phase_shift(atoi(args[1]), &cur, &tgt); spll_get_phase_shift(atoi(args[1]), &cur, &tgt);
printf("%d %d\n", cur, tgt); printf("%d %d\n", cur, tgt);
} else if (!strcasecmp(args[0], "start")) } else if (!strcasecmp(args[0], "start")) {
{ if (!args[1])
if(!args[1])
return -EINVAL; return -EINVAL;
spll_start_channel(atoi(args[1])); spll_start_channel(atoi(args[1]));
} else if (!strcasecmp(args[0], "stop")) } else if (!strcasecmp(args[0], "stop")) {
{ if (!args[1])
if(!args[1])
return -EINVAL; return -EINVAL;
spll_stop_channel(atoi(args[1])); spll_stop_channel(atoi(args[1]));
} else if (!strcasecmp(args[0], "sdac")) } else if (!strcasecmp(args[0], "sdac")) {
{ if (!args[2])
if(!args[2])
return -EINVAL; return -EINVAL;
spll_set_dac(atoi(args[1]), atoi(args[2])); spll_set_dac(atoi(args[1]), atoi(args[2]));
} else if (!strcasecmp(args[0], "gdac")) } else if (!strcasecmp(args[0], "gdac")) {
{ if (!args[1])
if(!args[1])
return -EINVAL; return -EINVAL;
mprintf("%d\n", spll_get_dac(atoi(args[1]))); mprintf("%d\n", spll_get_dac(atoi(args[1])));
} else return -EINVAL; } else
return -EINVAL;
return 0; return 0;
} }
...@@ -8,12 +8,11 @@ ...@@ -8,12 +8,11 @@
#include "shell.h" #include "shell.h"
int cmd_ptp(const char *args[]) int cmd_ptp(const char *args[])
{ {
if(!strcasecmp(args[0], "start")) if (!strcasecmp(args[0], "start"))
return wrc_ptp_start(); return wrc_ptp_start();
else if(!strcasecmp(args[0], "stop")) else if (!strcasecmp(args[0], "stop"))
return wrc_ptp_stop(); return wrc_ptp_stop();
else else
return -EINVAL; return -EINVAL;
......
...@@ -19,18 +19,17 @@ ...@@ -19,18 +19,17 @@
int cmd_sfp(const char *args[]) int cmd_sfp(const char *args[])
{ {
int8_t sfpcount=1, i, temp; int8_t sfpcount = 1, i, temp;
struct s_sfpinfo sfp; struct s_sfpinfo sfp;
static char pn[SFP_PN_LEN+1] = "\0"; static char pn[SFP_PN_LEN + 1] = "\0";
if(args[0] && !strcasecmp(args[0], "detect")) if (args[0] && !strcasecmp(args[0], "detect")) {
{ if (!sfp_present())
if(!sfp_present())
mprintf("No SFP.\n"); mprintf("No SFP.\n");
else else
sfp_read_part_id(pn); sfp_read_part_id(pn);
pn[16]=0; pn[16] = 0;
mprintf("%s\n",pn); mprintf("%s\n", pn);
return 0; return 0;
} }
// else if (!strcasecmp(args[0], "i2cscan")) // else if (!strcasecmp(args[0], "i2cscan"))
...@@ -38,70 +37,62 @@ int cmd_sfp(const char *args[]) ...@@ -38,70 +37,62 @@ int cmd_sfp(const char *args[])
// mi2c_scan(WRPC_FMC_I2C); // mi2c_scan(WRPC_FMC_I2C);
// return 0; // return 0;
// } // }
else if (!strcasecmp(args[0], "erase")) else if (!strcasecmp(args[0], "erase")) {
{ if (eeprom_sfpdb_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) ==
if( eeprom_sfpdb_erase(WRPC_FMC_I2C, FMC_EEPROM_ADR) == EE_RET_I2CERR) EE_RET_I2CERR)
mprintf("Could not erase DB\n"); mprintf("Could not erase DB\n");
} } else if (args[4] && !strcasecmp(args[0], "add")) {
else if (args[4] && !strcasecmp(args[0], "add")) if (strlen(args[1]) > 16)
{ temp = 16;
if(strlen( args[1] )>16) temp=16; else
else temp=strlen( args[1] ); temp = strlen(args[1]);
for(i=0; i<temp; ++i) for (i = 0; i < temp; ++i)
sfp.pn[i]=args[1][i]; sfp.pn[i] = args[1][i];
while(i<16) sfp.pn[i++]=' '; //padding while (i < 16)
sfp.pn[i++] = ' '; //padding
sfp.dTx = atoi(args[2]); sfp.dTx = atoi(args[2]);
sfp.dRx = atoi(args[3]); sfp.dRx = atoi(args[3]);
sfp.alpha = atoi(args[4]); sfp.alpha = atoi(args[4]);
temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp, 1, 0); temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp, 1, 0);
if(temp == EE_RET_DBFULL) if (temp == EE_RET_DBFULL)
mprintf("SFP DB is full\n"); mprintf("SFP DB is full\n");
else if(temp == EE_RET_I2CERR) else if (temp == EE_RET_I2CERR)
mprintf("I2C error\n"); mprintf("I2C error\n");
else else
mprintf("%d SFPs in DB\n", temp); mprintf("%d SFPs in DB\n", temp);
} } else if (args[0] && !strcasecmp(args[0], "show")) {
else if (args[0] && !strcasecmp(args[0], "show")) for (i = 0; i < sfpcount; ++i) {
{ temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR,
for(i=0; i<sfpcount; ++i) &sfp, 0, i);
{ if (!i) {
temp = eeprom_get_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp, 0, i); sfpcount = temp; //only in first round valid sfpcount is returned from eeprom_get_sfp
if(!i) if (sfpcount == 0 || sfpcount == 0xFF) {
{
sfpcount=temp; //only in first round valid sfpcount is returned from eeprom_get_sfp
if(sfpcount == 0 || sfpcount == 0xFF)
{
mprintf("SFP database empty...\n"); mprintf("SFP database empty...\n");
return 0; return 0;
} } else if (sfpcount == -1) {
else if(sfpcount == -1)
{
mprintf("SFP database corrupted...\n"); mprintf("SFP database corrupted...\n");
return 0; return 0;
} }
} }
mprintf("%d: PN:", i+1); mprintf("%d: PN:", i + 1);
for(temp=0; temp<16; ++temp) for (temp = 0; temp < 16; ++temp)
mprintf("%c", sfp.pn[temp]); mprintf("%c", sfp.pn[temp]);
mprintf(" dTx: %d, dRx: %d, alpha: %d\n", sfp.dTx, sfp.dRx, sfp.alpha); mprintf(" dTx: %d, dRx: %d, alpha: %d\n", sfp.dTx,
sfp.dRx, sfp.alpha);
} }
} } else if (args[0] && !strcasecmp(args[0], "match")) {
else if (args[0] && !strcasecmp(args[0], "match")) if (pn[0] == '\0') {
{
if(pn[0]=='\0')
{
mprintf("Run sfp detect first\n"); mprintf("Run sfp detect first\n");
return 0; return 0;
} }
strncpy(sfp.pn, pn, SFP_PN_LEN); strncpy(sfp.pn, pn, SFP_PN_LEN);
if(eeprom_match_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp) > 0) if (eeprom_match_sfp(WRPC_FMC_I2C, FMC_EEPROM_ADR, &sfp) > 0) {
{ mprintf("SFP matched, dTx=%d, dRx=%d, alpha=%d\n",
mprintf("SFP matched, dTx=%d, dRx=%d, alpha=%d\n", sfp.dTx, sfp.dRx, sfp.alpha); sfp.dTx, sfp.dRx, sfp.alpha);
sfp_deltaTx = sfp.dTx; sfp_deltaTx = sfp.dTx;
sfp_deltaRx = sfp.dRx; sfp_deltaRx = sfp.dRx;
sfp_alpha = sfp.alpha; sfp_alpha = sfp.alpha;
} } else
else
mprintf("Could not match to DB\n"); mprintf("Could not match to DB\n");
return 0; return 0;
} }
......
...@@ -2,11 +2,9 @@ ...@@ -2,11 +2,9 @@
int cmd_stat(const char *args[]) int cmd_stat(const char *args[])
{ {
if(!strcasecmp(args[0], "cont") ) if (!strcasecmp(args[0], "cont")) {
{
wrc_ui_mode = UI_STAT_MODE; wrc_ui_mode = UI_STAT_MODE;
} } else
else
wrc_log_stats(1); wrc_log_stats(1);
return 0; return 0;
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "wrc_ptp.h" #include "wrc_ptp.h"
#include "pps_gen.h" #include "pps_gen.h"
int cmd_time(const char *args[]) int cmd_time(const char *args[])
{ {
uint64_t sec; uint64_t sec;
...@@ -22,16 +21,15 @@ int cmd_time(const char *args[]) ...@@ -22,16 +21,15 @@ int cmd_time(const char *args[])
pps_gen_get_time(&sec, &nsec); pps_gen_get_time(&sec, &nsec);
if(args[2] && !strcasecmp(args[0], "set")) { if (args[2] && !strcasecmp(args[0], "set")) {
if(wrc_ptp_get_mode() != WRC_MODE_SLAVE) if (wrc_ptp_get_mode() != WRC_MODE_SLAVE) {
{ pps_gen_set_time((uint64_t) atoi(args[1]),
pps_gen_set_time((uint64_t)atoi(args[1]), atoi(args[2])); atoi(args[2]));
return 0; return 0;
} else } else
return -EBUSY; return -EBUSY;
} else if(args[0] && !strcasecmp(args[0], "raw")) } else if (args[0] && !strcasecmp(args[0], "raw")) {
{ mprintf("%d %d\n", (uint32_t) sec, nsec);
mprintf("%d %d\n", (uint32_t)sec, nsec);
return 0; return 0;
} }
......
...@@ -5,6 +5,7 @@ extern const char *build_revision, *build_date; ...@@ -5,6 +5,7 @@ extern const char *build_revision, *build_date;
int cmd_version(const char *args[]) int cmd_version(const char *args[])
{ {
mprintf("WR Core build: %s, compiled on: %s (memory size: %d kB)\n", build_revision, build_date, sysc_get_memsize()); mprintf("WR Core build: %s, compiled on: %s (memory size: %d kB)\n",
build_revision, build_date, sysc_get_memsize());
return 0; return 0;
} }
...@@ -18,10 +18,10 @@ void env_init() ...@@ -18,10 +18,10 @@ void env_init()
static char *_env_get(const char *var) static char *_env_get(const char *var)
{ {
int i = 0; int i = 0;
while(i < SH_ENVIRON_SIZE && env_buf[i] != 0xff) while (i < SH_ENVIRON_SIZE && env_buf[i] != 0xff) {
{ if (env_buf[i] == 0xaa
if(env_buf[i] == 0xaa && !strcasecmp((char*)env_buf + i + 1, var)) && !strcasecmp((char *)env_buf + i + 1, var))
return (char*)env_buf + i; return (char *)env_buf + i;
i++; i++;
} }
...@@ -33,16 +33,17 @@ char *env_get(const char *var) ...@@ -33,16 +33,17 @@ char *env_get(const char *var)
{ {
char *p = _env_get(var); char *p = _env_get(var);
if(!p) return NULL; if (!p)
return NULL;
return p+2+strlen(p+1); return p + 2 + strlen(p + 1);
} }
static int _env_end() static int _env_end()
{ {
int i; int i;
for(i=0;i<SH_ENVIRON_SIZE;i++) for (i = 0; i < SH_ENVIRON_SIZE; i++)
if(env_buf[i] == 0xff) if (env_buf[i] == 0xff)
return i; return i;
} }
...@@ -51,10 +52,10 @@ int env_set(const char *var, const char *value) ...@@ -51,10 +52,10 @@ int env_set(const char *var, const char *value)
unsigned char *vstart = _env_get(var), *p; unsigned char *vstart = _env_get(var), *p;
int end; int end;
if(vstart) /* entry already present? remove current and append at the end of environment */ if (vstart) { /* entry already present? remove current and append at the end of environment */
{ p = vstart + 1;
p=vstart+1; while (*p != 0xaa && *p != 0xff)
while(*p != 0xaa && *p != 0xff) p++; p++;
memmove(vstart, p, SH_ENVIRON_SIZE - (p - env_buf)); memmove(vstart, p, SH_ENVIRON_SIZE - (p - env_buf));
} }
...@@ -67,8 +68,10 @@ int env_set(const char *var, const char *value) ...@@ -67,8 +68,10 @@ int env_set(const char *var, const char *value)
p = &env_buf[end]; p = &env_buf[end];
*p++ = 0xaa; *p++ = 0xaa;
memcpy(p, var, strlen(var) + 1); p += strlen(var) + 1; memcpy(p, var, strlen(var) + 1);
memcpy(p, value, strlen(value) + 1); p += strlen(value) + 1; p += strlen(var) + 1;
memcpy(p, value, strlen(value) + 1);
p += strlen(value) + 1;
*p++ = 0xff; *p++ = 0xff;
p = env_buf; p = env_buf;
...@@ -80,10 +83,9 @@ int cmd_env(const char *args[]) ...@@ -80,10 +83,9 @@ int cmd_env(const char *args[])
{ {
unsigned char *p = env_buf; unsigned char *p = env_buf;
while(*p != 0xff) while (*p != 0xff) {
{ if (*p == 0xaa)
if(*p==0xaa) mprintf("%s=%s\n", p + 1, p + strlen(p + 1) + 2);
mprintf("%s=%s\n", p+1, p+strlen(p+1)+2);
p++; p++;
} }
...@@ -98,9 +100,8 @@ int cmd_saveenv(const char *args[]) ...@@ -98,9 +100,8 @@ int cmd_saveenv(const char *args[])
int cmd_set(const char *args[]) int cmd_set(const char *args[])
{ {
if(!args[1]) if (!args[1])
return -EINVAL; return -EINVAL;
return env_set(args[0], args[1]); return env_set(args[0], args[1]);
} }
...@@ -27,35 +27,33 @@ ...@@ -27,35 +27,33 @@
#define KEY_BACKSPACE (127) #define KEY_BACKSPACE (127)
#define KEY_DELETE (126) #define KEY_DELETE (126)
struct shell_cmd { struct shell_cmd {
char *name; char *name;
int (*exec)(const char *args[]); int (*exec) (const char *args[]);
}; };
static const struct shell_cmd cmds_list[] = { static const struct shell_cmd cmds_list[] = {
{ "pll", cmd_pll }, {"pll", cmd_pll},
{ "gui", cmd_gui }, {"gui", cmd_gui},
{ "ver", cmd_version }, {"ver", cmd_version},
{ "stat", cmd_stat }, {"stat", cmd_stat},
{ "ptp", cmd_ptp }, {"ptp", cmd_ptp},
{ "mode", cmd_mode }, {"mode", cmd_mode},
{ "calibration", cmd_calib }, {"calibration", cmd_calib},
{ "set", cmd_set }, {"set", cmd_set},
{ "env", cmd_env }, {"env", cmd_env},
{ "saveenv", cmd_saveenv }, {"saveenv", cmd_saveenv},
{ "time", cmd_time }, {"time", cmd_time},
{ "sfp", cmd_sfp }, {"sfp", cmd_sfp},
{ "init", cmd_init }, {"init", cmd_init},
#if WITH_ETHERBONE #if WITH_ETHERBONE
{ "ip", cmd_ip }, {"ip", cmd_ip},
#endif #endif
{ "mac", cmd_mac }, {"mac", cmd_mac},
{ "sdb", cmd_sdb }, {"sdb", cmd_sdb},
{ NULL, NULL } {NULL, NULL}
}; };
static char cmd_buf[SH_MAX_LINE_LEN + 1]; static char cmd_buf[SH_MAX_LINE_LEN + 1];
static int cmd_pos = 0, cmd_len = 0; static int cmd_pos = 0, cmd_len = 0;
...@@ -64,11 +62,12 @@ static int current_key = 0; ...@@ -64,11 +62,12 @@ static int current_key = 0;
static int insert(char c) static int insert(char c)
{ {
if(cmd_len >= SH_MAX_LINE_LEN) if (cmd_len >= SH_MAX_LINE_LEN)
return 0; return 0;
if(cmd_pos != cmd_len) if (cmd_pos != cmd_len)
memmove(&cmd_buf[cmd_pos+1], &cmd_buf[cmd_pos], cmd_len - cmd_pos); memmove(&cmd_buf[cmd_pos + 1], &cmd_buf[cmd_pos],
cmd_len - cmd_pos);
cmd_buf[cmd_pos] = c; cmd_buf[cmd_pos] = c;
cmd_pos++; cmd_pos++;
...@@ -79,7 +78,7 @@ static int insert(char c) ...@@ -79,7 +78,7 @@ static int insert(char c)
static void delete(int where) static void delete(int where)
{ {
memmove(&cmd_buf[where], &cmd_buf[where+1], cmd_len - where); memmove(&cmd_buf[where], &cmd_buf[where + 1], cmd_len - where);
cmd_len--; cmd_len--;
} }
...@@ -90,39 +89,39 @@ static void esc(char code) ...@@ -90,39 +89,39 @@ static void esc(char code)
static int _shell_exec() static int _shell_exec()
{ {
char *tokptr[SH_MAX_ARGS+1]; char *tokptr[SH_MAX_ARGS + 1];
int n = 0, i = 0; int n = 0, i = 0;
memset(tokptr, 0, sizeof(tokptr)); memset(tokptr, 0, sizeof(tokptr));
while(1) while (1) {
{ if (n >= SH_MAX_ARGS)
if(n >= SH_MAX_ARGS)
break; break;
while(cmd_buf[i] == ' ' && cmd_buf[i]) cmd_buf[i++] = 0; while (cmd_buf[i] == ' ' && cmd_buf[i])
cmd_buf[i++] = 0;
if(!cmd_buf[i]) if (!cmd_buf[i])
break; break;
tokptr [n++] = &cmd_buf[i]; tokptr[n++] = &cmd_buf[i];
while(cmd_buf[i] != ' ' && cmd_buf[i]) i++; while (cmd_buf[i] != ' ' && cmd_buf[i])
i++;
if(!cmd_buf[i]) if (!cmd_buf[i])
break; break;
} }
if(!n) if (!n)
return 0; return 0;
if(*tokptr[0] == '#') if (*tokptr[0] == '#')
return 0; return 0;
for(i=0; cmds_list[i].name; i++) for (i = 0; cmds_list[i].name; i++)
if(!strcasecmp(cmds_list[i].name, tokptr[0])) if (!strcasecmp(cmds_list[i].name, tokptr[0])) {
{ int rv = cmds_list[i].exec((const char **)tokptr + 1);
int rv = cmds_list[i].exec((const char **)tokptr+1); if (rv < 0)
if(rv<0)
mprintf("Err %d\n", rv); mprintf("Err %d\n", rv);
return rv; return rv;
} }
...@@ -149,8 +148,7 @@ void shell_init() ...@@ -149,8 +148,7 @@ void shell_init()
void shell_interactive() void shell_interactive()
{ {
int c; int c;
switch(state) switch (state) {
{
case SH_PROMPT: case SH_PROMPT:
mprintf("wrc# "); mprintf("wrc# ");
cmd_pos = 0; cmd_pos = 0;
...@@ -161,29 +159,25 @@ void shell_interactive() ...@@ -161,29 +159,25 @@ void shell_interactive()
case SH_INPUT: case SH_INPUT:
c = uart_read_byte(); c = uart_read_byte();
if(c < 0) if (c < 0)
return; return;
if(c == 27 || ((current_key & ESCAPE_FLAG) && c == 91)) if (c == 27 || ((current_key & ESCAPE_FLAG) && c == 91))
current_key = ESCAPE_FLAG; current_key = ESCAPE_FLAG;
else else
current_key |= c; current_key |= c;
if(current_key & 0xff) if (current_key & 0xff) {
{
switch(current_key) switch (current_key) {
{
case KEY_LEFT: case KEY_LEFT:
if(cmd_pos > 0) if (cmd_pos > 0) {
{
cmd_pos--; cmd_pos--;
esc('D'); esc('D');
} }
break; break;
case KEY_RIGHT: case KEY_RIGHT:
if(cmd_pos < cmd_len) if (cmd_pos < cmd_len) {
{
cmd_pos++; cmd_pos++;
esc('C'); esc('C');
} }
...@@ -195,19 +189,17 @@ void shell_interactive() ...@@ -195,19 +189,17 @@ void shell_interactive()
break; break;
case KEY_DELETE: case KEY_DELETE:
if(cmd_pos != cmd_len) if (cmd_pos != cmd_len) {
{
delete(cmd_pos); delete(cmd_pos);
esc('P'); esc('P');
} }
break; break;
case KEY_BACKSPACE: case KEY_BACKSPACE:
if(cmd_pos > 0) if (cmd_pos > 0) {
{
esc('D'); esc('D');
esc('P'); esc('P');
delete(cmd_pos-1); delete(cmd_pos - 1);
cmd_pos--; cmd_pos--;
} }
break; break;
...@@ -216,8 +208,8 @@ void shell_interactive() ...@@ -216,8 +208,8 @@ void shell_interactive()
break; break;
default: default:
if(!(current_key & ESCAPE_FLAG) && insert(current_key)) if (!(current_key & ESCAPE_FLAG)
{ && insert(current_key)) {
esc('@'); esc('@');
mprintf("%c", current_key); mprintf("%c", current_key);
} }
...@@ -236,7 +228,8 @@ void shell_interactive() ...@@ -236,7 +228,8 @@ void shell_interactive()
} }
} }
const char* fromhex(const char* hex, int* v) { const char *fromhex(const char *hex, int *v)
{
int o = 0; int o = 0;
for (; *hex; ++hex) { for (; *hex; ++hex) {
...@@ -255,7 +248,8 @@ const char* fromhex(const char* hex, int* v) { ...@@ -255,7 +248,8 @@ const char* fromhex(const char* hex, int* v) {
return hex; return hex;
} }
const char* fromdec(const char* dec, int* v) { const char *fromdec(const char *dec, int *v)
{
int o = 0; int o = 0;
for (; *dec; ++dec) { for (; *dec; ++dec) {
...@@ -272,21 +266,22 @@ const char* fromdec(const char* dec, int* v) { ...@@ -272,21 +266,22 @@ const char* fromdec(const char* dec, int* v) {
int shell_boot_script(void) int shell_boot_script(void)
{ {
uint8_t next=0; uint8_t next = 0;
//first check if EEPROM is really there //first check if EEPROM is really there
eeprom_present(WRPC_FMC_I2C, FMC_EEPROM_ADR); eeprom_present(WRPC_FMC_I2C, FMC_EEPROM_ADR);
if(!has_eeprom) return -1; if (!has_eeprom)
return -1;
while(1)
{ while (1) {
cmd_len = eeprom_init_readcmd(WRPC_FMC_I2C, FMC_EEPROM_ADR, cmd_buf, SH_MAX_LINE_LEN, next); cmd_len = eeprom_init_readcmd(WRPC_FMC_I2C, FMC_EEPROM_ADR,
if(cmd_len <= 0) cmd_buf, SH_MAX_LINE_LEN, next);
{ if (cmd_len <= 0) {
if(next==0) mprintf("Empty init script...\n"); if (next == 0)
mprintf("Empty init script...\n");
break; break;
} }
cmd_buf[cmd_len-1] = 0; cmd_buf[cmd_len - 1] = 0;
mprintf("executing: %s\n", cmd_buf); mprintf("executing: %s\n", cmd_buf);
_shell_exec(); _shell_exec();
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
ushort utilcrc16[MAX_PORTNUM]; ushort utilcrc16[MAX_PORTNUM];
uchar utilcrc8[MAX_PORTNUM]; uchar utilcrc8[MAX_PORTNUM];
static short oddparity[16] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; static short oddparity[16] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 };
static uchar dscrc_table[] = { static uchar dscrc_table[] = {
0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
...@@ -59,7 +60,7 @@ static uchar dscrc_table[] = { ...@@ -59,7 +60,7 @@ static uchar dscrc_table[] = {
// //
void setcrc16(int portnum, ushort reset) void setcrc16(int portnum, ushort reset)
{ {
utilcrc16[portnum&0x0FF] = reset; utilcrc16[portnum & 0x0FF] = reset;
return; return;
} }
...@@ -72,7 +73,7 @@ void setcrc16(int portnum, ushort reset) ...@@ -72,7 +73,7 @@ void setcrc16(int portnum, ushort reset)
// //
void setcrc8(int portnum, uchar reset) void setcrc8(int portnum, uchar reset)
{ {
utilcrc8[portnum&0x0FF] = reset; utilcrc8[portnum & 0x0FF] = reset;
return; return;
} }
...@@ -88,18 +89,18 @@ void setcrc8(int portnum, uchar reset) ...@@ -88,18 +89,18 @@ void setcrc8(int portnum, uchar reset)
// //
ushort docrc16(int portnum, ushort cdata) ushort docrc16(int portnum, ushort cdata)
{ {
cdata = (cdata ^ (utilcrc16[portnum&0x0FF] & 0xff)) & 0xff; cdata = (cdata ^ (utilcrc16[portnum & 0x0FF] & 0xff)) & 0xff;
utilcrc16[portnum&0x0FF] >>= 8; utilcrc16[portnum & 0x0FF] >>= 8;
if (oddparity[cdata & 0xf] ^ oddparity[cdata >> 4]) if (oddparity[cdata & 0xf] ^ oddparity[cdata >> 4])
utilcrc16[portnum&0x0FF] ^= 0xc001; utilcrc16[portnum & 0x0FF] ^= 0xc001;
cdata <<= 6; cdata <<= 6;
utilcrc16[portnum&0x0FF] ^= cdata; utilcrc16[portnum & 0x0FF] ^= cdata;
cdata <<= 1; cdata <<= 1;
utilcrc16[portnum&0x0FF] ^= cdata; utilcrc16[portnum & 0x0FF] ^= cdata;
return utilcrc16[portnum&0x0FF]; return utilcrc16[portnum & 0x0FF];
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -114,6 +115,6 @@ ushort docrc16(int portnum, ushort cdata) ...@@ -114,6 +115,6 @@ ushort docrc16(int portnum, ushort cdata)
// //
uchar docrc8(int portnum, uchar x) uchar docrc8(int portnum, uchar x)
{ {
utilcrc8[portnum&0x0FF] = dscrc_table[utilcrc8[portnum&0x0FF] ^ x]; utilcrc8[portnum & 0x0FF] = dscrc_table[utilcrc8[portnum & 0x0FF] ^ x];
return utilcrc8[portnum&0x0FF]; return utilcrc8[portnum & 0x0FF];
} }
...@@ -8,54 +8,52 @@ ...@@ -8,54 +8,52 @@
//#define DEBUG_EEP43 1 //#define DEBUG_EEP43 1
int Write43(int portnum, uchar *SerialNum, int page, uchar *page_buffer) int Write43(int portnum, uchar * SerialNum, int page, uchar * page_buffer)
{ {
uchar rt=FALSE; uchar rt = FALSE;
ushort lastcrc16; ushort lastcrc16;
int i; int i;
owSerialNum(portnum, SerialNum, FALSE); owSerialNum(portnum, SerialNum, FALSE);
if(owAccess(portnum)) if (owAccess(portnum)) {
{
#if DEBUG_EEP43 #if DEBUG_EEP43
mprintf(" Writing Scratchpad...\n"); mprintf(" Writing Scratchpad...\n");
#endif #endif
if (!owWriteBytePower(portnum, WRITE_SCRATCH_CMD)) if (!owWriteBytePower(portnum, WRITE_SCRATCH_CMD))
return FALSE; return FALSE;
setcrc16(portnum, 0); setcrc16(portnum, 0);
docrc16(portnum,(ushort)WRITE_SCRATCH_CMD); docrc16(portnum, (ushort) WRITE_SCRATCH_CMD);
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
owWriteBytePower(portnum, 0x00); //write LSB of target addr owWriteBytePower(portnum, 0x00); //write LSB of target addr
docrc16(portnum,(ushort)0x00); docrc16(portnum, (ushort) 0x00);
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
owWriteBytePower(portnum, 0x00); //write MSB of target addr owWriteBytePower(portnum, 0x00); //write MSB of target addr
docrc16(portnum,(ushort)0x00); docrc16(portnum, (ushort) 0x00);
for(i = 0; i < 32; i++) //write 32 data bytes to scratchpad for (i = 0; i < 32; i++) //write 32 data bytes to scratchpad
{ {
owLevel(portnum,MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
owWriteBytePower(portnum, page_buffer[i]); owWriteBytePower(portnum, page_buffer[i]);
lastcrc16 = docrc16(portnum, page_buffer[i]); lastcrc16 = docrc16(portnum, page_buffer[i]);
// mprintf(" CRC16: %x\n", lastcrc16); // mprintf(" CRC16: %x\n", lastcrc16);
} }
for(i = 0; i < 2; i++) //read two bytes CRC16 for (i = 0; i < 2; i++) //read two bytes CRC16
{ {
owLevel(portnum,MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
lastcrc16 = docrc16(portnum,(ushort)owReadBytePower(portnum)); lastcrc16 =
docrc16(portnum, (ushort) owReadBytePower(portnum));
} }
#if DEBUG_EEP43 #if DEBUG_EEP43
mprintf(" CRC16: %x\n", lastcrc16); mprintf(" CRC16: %x\n", lastcrc16);
#endif #endif
if(lastcrc16 == 0xb001) if (lastcrc16 == 0xb001) {
{
//copy to mem //copy to mem
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
if(Copy2Mem43(portnum, SerialNum)) if (Copy2Mem43(portnum, SerialNum))
rt=TRUE; rt = TRUE;
} }
} }
...@@ -64,17 +62,16 @@ int Write43(int portnum, uchar *SerialNum, int page, uchar *page_buffer) ...@@ -64,17 +62,16 @@ int Write43(int portnum, uchar *SerialNum, int page, uchar *page_buffer)
return rt; return rt;
} }
int Copy2Mem43(int portnum, uchar *SerialNum) int Copy2Mem43(int portnum, uchar * SerialNum)
{ {
uchar rt=FALSE; uchar rt = FALSE;
ushort lastcrc16; ushort lastcrc16;
int i; int i;
uchar read_data; uchar read_data;
owSerialNum(portnum, SerialNum, FALSE); owSerialNum(portnum, SerialNum, FALSE);
if(owAccess(portnum)) if (owAccess(portnum)) {
{
if (!owWriteBytePower(portnum, COPY_SCRATCH_CMD)) if (!owWriteBytePower(portnum, COPY_SCRATCH_CMD))
return FALSE; return FALSE;
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
...@@ -86,26 +83,24 @@ int Copy2Mem43(int portnum, uchar *SerialNum) ...@@ -86,26 +83,24 @@ int Copy2Mem43(int portnum, uchar *SerialNum)
usleep(500000); usleep(500000);
owLevel(portnum, MODE_NORMAL);
owLevel(portnum,MODE_NORMAL);
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
if (read_data == 0xaa) if (read_data == 0xaa)
rt=TRUE; rt = TRUE;
} }
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
return rt; return rt;
} }
// routine for reading the scratchpad of a DS28EC20P EEPROM // routine for reading the scratchpad of a DS28EC20P EEPROM
// 80 pages of 32byte // 80 pages of 32byte
// 32byte scratchpad // 32byte scratchpad
// expects 32 byte deep buffer // expects 32 byte deep buffer
int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer) int ReadScratch43(int portnum, uchar * SerialNum, uchar * page_buffer)
{ {
uchar rt=FALSE; uchar rt = FALSE;
ushort lastcrc16; ushort lastcrc16;
int i; int i;
ushort target_addr = 0; ushort target_addr = 0;
...@@ -113,8 +108,7 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer) ...@@ -113,8 +108,7 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer)
owSerialNum(portnum, SerialNum, FALSE); owSerialNum(portnum, SerialNum, FALSE);
if(owAccess(portnum)) if (owAccess(portnum)) {
{
#if DEBUG_EEP43 #if DEBUG_EEP43
mprintf(" Reading Scratchpad...\n"); mprintf(" Reading Scratchpad...\n");
#endif #endif
...@@ -122,30 +116,27 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer) ...@@ -122,30 +116,27 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer)
return FALSE; return FALSE;
setcrc16(portnum, 0); //init crc setcrc16(portnum, 0); //init crc
docrc16(portnum,(ushort)READ_SCRATCH_CMD); docrc16(portnum, (ushort) READ_SCRATCH_CMD);
owLevel(portnum,MODE_NORMAL); //read 2 byte address and 1 byte status owLevel(portnum, MODE_NORMAL); //read 2 byte address and 1 byte status
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, read_data); lastcrc16 = docrc16(portnum, read_data);
target_addr = read_data; target_addr = read_data;
owLevel(portnum,MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, read_data); lastcrc16 = docrc16(portnum, read_data);
target_addr |= read_data << 8; target_addr |= read_data << 8;
owLevel(portnum,MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, read_data); lastcrc16 = docrc16(portnum, read_data);
#if DEBUG_EEP43 #if DEBUG_EEP43
mprintf("E/S: 0x%x\n", read_data); mprintf("E/S: 0x%x\n", read_data);
#endif #endif
for(i = 0; i < 32; i++) for (i = 0; i < 32; i++) {
{ owLevel(portnum, MODE_NORMAL);
owLevel(portnum,MODE_NORMAL);
page_buffer[i] = owReadBytePower(portnum); page_buffer[i] = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, page_buffer[i]); lastcrc16 = docrc16(portnum, page_buffer[i]);
// mprintf("send_block[%d]: %x", i, send_block[i]); // mprintf("send_block[%d]: %x", i, send_block[i]);
...@@ -153,26 +144,24 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer) ...@@ -153,26 +144,24 @@ int ReadScratch43(int portnum, uchar *SerialNum, uchar *page_buffer)
// mprintf(" CRC16i: %x\n", ~lastcrc16); // mprintf(" CRC16i: %x\n", ~lastcrc16);
} }
for(i = 0; i < 2; i++) for (i = 0; i < 2; i++) {
{ owLevel(portnum, MODE_NORMAL);
owLevel(portnum,MODE_NORMAL);
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, read_data); lastcrc16 = docrc16(portnum, read_data);
} }
if (lastcrc16 == 0xb001) if (lastcrc16 == 0xb001)
rt=TRUE; rt = TRUE;
} }
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
return rt; return rt;
} }
// routine for reading a memory page of a DS28EC20P EEPROM // routine for reading a memory page of a DS28EC20P EEPROM
// expects 32 byte deep buffer // expects 32 byte deep buffer
int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer) int ReadMem43(int portnum, uchar * SerialNum, int page, uchar * page_buffer)
{ {
uchar rt=FALSE; uchar rt = FALSE;
ushort lastcrc16; ushort lastcrc16;
int i; int i;
ushort target_addr = 0; ushort target_addr = 0;
...@@ -180,24 +169,22 @@ int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer) ...@@ -180,24 +169,22 @@ int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer)
owSerialNum(portnum, SerialNum, FALSE); owSerialNum(portnum, SerialNum, FALSE);
if(owAccess(portnum)) if (owAccess(portnum)) {
{
if (!owWriteBytePower(portnum, E_READ_MEM_CMD)) if (!owWriteBytePower(portnum, E_READ_MEM_CMD))
return FALSE; return FALSE;
setcrc16(portnum, 0); //init crc setcrc16(portnum, 0); //init crc
docrc16(portnum,(ushort)E_READ_MEM_CMD); docrc16(portnum, (ushort) E_READ_MEM_CMD);
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
owWriteBytePower(portnum, 0x00); //write LSB of target addr owWriteBytePower(portnum, 0x00); //write LSB of target addr
docrc16(portnum,(ushort)0x00); docrc16(portnum, (ushort) 0x00);
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
owWriteBytePower(portnum, 0x00); //write MSB of target addr owWriteBytePower(portnum, 0x00); //write MSB of target addr
docrc16(portnum,(ushort)0x00); docrc16(portnum, (ushort) 0x00);
for(i = 0; i < 32; i++) for (i = 0; i < 32; i++) {
{ owLevel(portnum, MODE_NORMAL);
owLevel(portnum,MODE_NORMAL);
page_buffer[i] = owReadBytePower(portnum); page_buffer[i] = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, page_buffer[i]); lastcrc16 = docrc16(portnum, page_buffer[i]);
// mprintf("send_block[%d]: %x", i, send_block[i]); // mprintf("send_block[%d]: %x", i, send_block[i]);
...@@ -205,14 +192,13 @@ int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer) ...@@ -205,14 +192,13 @@ int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer)
// mprintf(" CRC16i: %x\n", ~lastcrc16); // mprintf(" CRC16i: %x\n", ~lastcrc16);
} }
for(i = 0; i < 2; i++) for (i = 0; i < 2; i++) {
{ owLevel(portnum, MODE_NORMAL);
owLevel(portnum,MODE_NORMAL);
read_data = owReadBytePower(portnum); read_data = owReadBytePower(portnum);
lastcrc16 = docrc16(portnum, read_data); lastcrc16 = docrc16(portnum, read_data);
} }
if (lastcrc16 == 0xb001) if (lastcrc16 == 0xb001)
rt=TRUE; rt = TRUE;
} }
owLevel(portnum, MODE_NORMAL); owLevel(portnum, MODE_NORMAL);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define EEP43_H #define EEP43_H
/* returns TRUE for success */ /* returns TRUE for success */
int Write43(int portnum, uchar *SerialNum, int page, uchar *page_buffer); int Write43(int portnum, uchar * SerialNum, int page, uchar * page_buffer);
int ReadMem43(int portnum, uchar *SerialNum, int page, uchar *page_buffer); int ReadMem43(int portnum, uchar * SerialNum, int page, uchar * page_buffer);
#endif #endif
...@@ -49,25 +49,24 @@ ...@@ -49,25 +49,24 @@
// Returns: TRUE(1) success, device type found // Returns: TRUE(1) success, device type found
// FALSE(0) device not found // FALSE(0) device not found
// //
SMALLINT FindDevices(int portnum, uchar FamilySN[][8], SMALLINT family_code, int MAXDEVICES) SMALLINT FindDevices(int portnum, uchar FamilySN[][8], SMALLINT family_code,
int MAXDEVICES)
{ {
int NumDevices=0; int NumDevices = 0;
// find the devices // find the devices
// set the search to first find that family code // set the search to first find that family code
owFamilySearchSetup(portnum,family_code); owFamilySearchSetup(portnum, family_code);
// loop to find all of the devices up to MAXDEVICES // loop to find all of the devices up to MAXDEVICES
NumDevices = 0; NumDevices = 0;
do do {
{
// perform the search // perform the search
if (!owNext(portnum,TRUE, FALSE)) if (!owNext(portnum, TRUE, FALSE))
break; break;
owSerialNum(portnum,FamilySN[NumDevices], TRUE); owSerialNum(portnum, FamilySN[NumDevices], TRUE);
if ((FamilySN[NumDevices][0] & 0x7F) == (family_code & 0x7F)) if ((FamilySN[NumDevices][0] & 0x7F) == (family_code & 0x7F)) {
{
NumDevices++; NumDevices++;
} }
} }
......
...@@ -30,4 +30,4 @@ ...@@ -30,4 +30,4 @@
// //
//---------------------------------------------------------------------- //----------------------------------------------------------------------
SMALLINT FindDevices(int,uchar FamilySN[][8],SMALLINT,int); SMALLINT FindDevices(int, uchar FamilySN[][8], SMALLINT, int);
This diff is collapsed.
...@@ -50,35 +50,36 @@ ...@@ -50,35 +50,36 @@
// exportable link-level functions // exportable link-level functions
SMALLINT owTouchReset(int); SMALLINT owTouchReset(int);
SMALLINT owTouchBit(int,SMALLINT); SMALLINT owTouchBit(int, SMALLINT);
SMALLINT owTouchByte(int,SMALLINT); SMALLINT owTouchByte(int, SMALLINT);
SMALLINT owWriteByte(int,SMALLINT); SMALLINT owWriteByte(int, SMALLINT);
SMALLINT owReadByte(int); SMALLINT owReadByte(int);
SMALLINT owSpeed(int,SMALLINT); SMALLINT owSpeed(int, SMALLINT);
SMALLINT owLevel(int,SMALLINT); SMALLINT owLevel(int, SMALLINT);
SMALLINT owProgramPulse(int); SMALLINT owProgramPulse(int);
//void msDelay(int); //void msDelay(int);
long msGettick(void); long msGettick(void);
SMALLINT owWriteBytePower(int,SMALLINT); SMALLINT owWriteBytePower(int, SMALLINT);
SMALLINT owReadBytePower(int); SMALLINT owReadBytePower(int);
SMALLINT owReadBitPower(int,SMALLINT); SMALLINT owReadBitPower(int, SMALLINT);
SMALLINT owHasPowerDelivery(int); SMALLINT owHasPowerDelivery(int);
SMALLINT owHasOverDrive(int); SMALLINT owHasOverDrive(int);
SMALLINT owHasProgramPulse(int); SMALLINT owHasProgramPulse(int);
SMALLINT owInit(void); SMALLINT owInit(void);
int S_OVD = 0; int S_OVD = 0;
int S_PWR = 0; int S_PWR = 0;
// init clock divider for SCU board // init clock divider for SCU board
SMALLINT owInit(void) SMALLINT owInit(void)
{ {
IOWR_SOCKIT_OWM_CDR(BASE_ONEWIRE, ((CLK_DIV_NOR & SOCKIT_OWM_CDR_N_MSK) | ((CLK_DIV_OVD << SOCKIT_OWM_CDR_O_OFST) & SOCKIT_OWM_CDR_O_MSK))); IOWR_SOCKIT_OWM_CDR(BASE_ONEWIRE,
((CLK_DIV_NOR & SOCKIT_OWM_CDR_N_MSK) |
((CLK_DIV_OVD << SOCKIT_OWM_CDR_O_OFST) &
SOCKIT_OWM_CDR_O_MSK)));
return 0; return 0;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Reset all of the devices on the 1-Wire Net and return the result. // Reset all of the devices on the 1-Wire Net and return the result.
// //
...@@ -93,15 +94,17 @@ SMALLINT owTouchReset(int portnum) ...@@ -93,15 +94,17 @@ SMALLINT owTouchReset(int portnum)
int reg; int reg;
int ovd = (S_OVD >> portnum) & 0x1; int ovd = (S_OVD >> portnum) & 0x1;
IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST ) IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST)
| (portnum << SOCKIT_OWM_CTL_SEL_OFST ) | (portnum << SOCKIT_OWM_CTL_SEL_OFST)
| (S_IEN ? SOCKIT_OWM_CTL_IEN_MSK : 0x00) | (S_IEN ? SOCKIT_OWM_CTL_IEN_MSK : 0x00)
| ( SOCKIT_OWM_CTL_CYC_MSK ) | (SOCKIT_OWM_CTL_CYC_MSK)
| (ovd ? SOCKIT_OWM_CTL_OVD_MSK : 0x00) | (ovd ? SOCKIT_OWM_CTL_OVD_MSK : 0x00)
| ( SOCKIT_OWM_CTL_RST_MSK )); | (SOCKIT_OWM_CTL_RST_MSK));
// wait for STX (end of transfer cycle) and read the presence status // wait for STX (end of transfer cycle) and read the presence status
while ((reg = IORD_SOCKIT_OWM_CTL (BASE_ONEWIRE)) & SOCKIT_OWM_CTL_CYC_MSK); while ((reg = IORD_SOCKIT_OWM_CTL(BASE_ONEWIRE))
& SOCKIT_OWM_CTL_CYC_MSK)
;
// return negated DAT (presence detect) // return negated DAT (presence detect)
return (~reg & SOCKIT_OWM_CTL_DAT_MSK); // NOTE the shortcut return (~reg & SOCKIT_OWM_CTL_DAT_MSK); // NOTE the shortcut
...@@ -125,18 +128,18 @@ SMALLINT owTouchBit(int portnum, SMALLINT sendbit) ...@@ -125,18 +128,18 @@ SMALLINT owTouchBit(int portnum, SMALLINT sendbit)
int reg; int reg;
int ovd = (S_OVD >> portnum) & 0x1; int ovd = (S_OVD >> portnum) & 0x1;
// read/write data // read/write data
IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST ) IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST)
| (portnum << SOCKIT_OWM_CTL_SEL_OFST ) | (portnum << SOCKIT_OWM_CTL_SEL_OFST)
| (S_IEN ? SOCKIT_OWM_CTL_IEN_MSK : 0x00) | (S_IEN ? SOCKIT_OWM_CTL_IEN_MSK : 0x00)
| ( SOCKIT_OWM_CTL_CYC_MSK ) | (SOCKIT_OWM_CTL_CYC_MSK)
| (ovd ? SOCKIT_OWM_CTL_OVD_MSK : 0x00) | (ovd ? SOCKIT_OWM_CTL_OVD_MSK : 0x00)
| (sendbit & SOCKIT_OWM_CTL_DAT_MSK )); // NOTE the shortcut | (sendbit & SOCKIT_OWM_CTL_DAT_MSK)); // NOTE the shortcut
// wait for STX (end of transfer cycle) and read the read data bit // wait for STX (end of transfer cycle) and read the read data bit
while ((reg = IORD_SOCKIT_OWM_CTL (BASE_ONEWIRE)) & SOCKIT_OWM_CTL_CYC_MSK); while ((reg = IORD_SOCKIT_OWM_CTL(BASE_ONEWIRE))
& SOCKIT_OWM_CTL_CYC_MSK)
;
// return DAT (read bit) // return DAT (read bit)
return (reg & SOCKIT_OWM_CTL_DAT_MSK); // NOTE the shortcut return (reg & SOCKIT_OWM_CTL_DAT_MSK); // NOTE the shortcut
...@@ -158,9 +161,8 @@ SMALLINT owTouchByte(int portnum, SMALLINT sendbyte) ...@@ -158,9 +161,8 @@ SMALLINT owTouchByte(int portnum, SMALLINT sendbyte)
{ {
int i; int i;
SMALLINT dat = 0; SMALLINT dat = 0;
for (i=0; i<8; i++) for (i = 0; i < 8; i++) {
{ dat |= owTouchBit(portnum, sendbyte & 0x1) << i;
dat |= owTouchBit(portnum,sendbyte & 0x1) << i;
sendbyte >>= 1; sendbyte >>= 1;
} }
return dat; return dat;
...@@ -180,7 +182,7 @@ SMALLINT owTouchByte(int portnum, SMALLINT sendbyte) ...@@ -180,7 +182,7 @@ SMALLINT owTouchByte(int portnum, SMALLINT sendbyte)
// //
SMALLINT owWriteByte(int portnum, SMALLINT sendbyte) SMALLINT owWriteByte(int portnum, SMALLINT sendbyte)
{ {
return (owTouchByte(portnum,sendbyte) == sendbyte) ? TRUE : FALSE; return (owTouchByte(portnum, sendbyte) == sendbyte) ? TRUE : FALSE;
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -194,7 +196,7 @@ SMALLINT owWriteByte(int portnum, SMALLINT sendbyte) ...@@ -194,7 +196,7 @@ SMALLINT owWriteByte(int portnum, SMALLINT sendbyte)
// //
SMALLINT owReadByte(int portnum) SMALLINT owReadByte(int portnum)
{ {
return owTouchByte(portnum,0xFF); return owTouchByte(portnum, 0xFF);
} }
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
...@@ -214,8 +216,10 @@ SMALLINT owSpeed(int portnum, SMALLINT new_speed) ...@@ -214,8 +216,10 @@ SMALLINT owSpeed(int portnum, SMALLINT new_speed)
select = 0x1 << portnum; select = 0x1 << portnum;
//if overdrive is implemented use it //if overdrive is implemented use it
if (S_OVD_E) { if (S_OVD_E) {
if (new_speed == MODE_OVERDRIVE) S_OVD |= select; if (new_speed == MODE_OVERDRIVE)
if (new_speed == MODE_NORMAL ) S_OVD &= ~select; S_OVD |= select;
if (new_speed == MODE_NORMAL)
S_OVD &= ~select;
} }
// return the current port state // return the current port state
return (S_OVD & select) ? MODE_OVERDRIVE : MODE_NORMAL; return (S_OVD & select) ? MODE_OVERDRIVE : MODE_NORMAL;
...@@ -240,12 +244,15 @@ SMALLINT owLevel(int portnum, SMALLINT new_level) ...@@ -240,12 +244,15 @@ SMALLINT owLevel(int portnum, SMALLINT new_level)
if (new_level == MODE_STRONG5) { if (new_level == MODE_STRONG5) {
// set the power bit // set the power bit
S_PWR |= (1 << portnum); S_PWR |= (1 << portnum);
IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST) | SOCKIT_OWM_CTL_PWR_MSK); IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE,
(S_PWR << SOCKIT_OWM_CTL_POWER_OFST) |
SOCKIT_OWM_CTL_PWR_MSK);
} }
if (new_level == MODE_NORMAL) { if (new_level == MODE_NORMAL) {
// clear the power bit // clear the power bit
S_PWR &= ~(1 << portnum); S_PWR &= ~(1 << portnum);
IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, (S_PWR << SOCKIT_OWM_CTL_POWER_OFST)); IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE,
(S_PWR << SOCKIT_OWM_CTL_POWER_OFST));
} }
// return the current port state // return the current port state
return ((S_PWR >> portnum) & 0x1) ? MODE_STRONG5 : MODE_NORMAL; return ((S_PWR >> portnum) & 0x1) ? MODE_STRONG5 : MODE_NORMAL;
...@@ -278,7 +285,6 @@ SMALLINT owProgramPulse(int portnum) ...@@ -278,7 +285,6 @@ SMALLINT owProgramPulse(int portnum)
// compute the number delay cycles depending on delay time // compute the number delay cycles depending on delay time
len = (len * S_F_DLY) >> 16; len = (len * S_F_DLY) >> 16;
for (i=0; i<len; i++) { for (i=0; i<len; i++) {
// create a 960us pause // create a 960us pause
IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, ( S_PWR << SOCKIT_OWM_CTL_POWER_OFST ) IOWR_SOCKIT_OWM_CTL (BASE_ONEWIRE, ( S_PWR << SOCKIT_OWM_CTL_POWER_OFST )
...@@ -288,7 +294,8 @@ SMALLINT owProgramPulse(int portnum) ...@@ -288,7 +294,8 @@ SMALLINT owProgramPulse(int portnum)
| ( SOCKIT_OWM_CTL_DLY_MSK )); | ( SOCKIT_OWM_CTL_DLY_MSK ));
// wait for STX (end of transfer cycle) // wait for STX (end of transfer cycle)
while (IORD_SOCKIT_OWM_CTL (BASE_ONEWIRE) & SOCKIT_OWM_CTL_CYC_MSK); while (IORD_SOCKIT_OWM_CTL (BASE_ONEWIRE) & SOCKIT_OWM_CTL_CYC_MSK)
;
} }
#else #else
...@@ -310,7 +317,7 @@ long msGettick(void) ...@@ -310,7 +317,7 @@ long msGettick(void)
{ {
#ifdef UCOS_II #ifdef UCOS_II
// uCOS-II tick counter // uCOS-II tick counter
OSTimeGet(); OSTimeGet();
#else #else
// TODO add platform specific code here // TODO add platform specific code here
return 0; return 0;
...@@ -335,10 +342,10 @@ SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte) ...@@ -335,10 +342,10 @@ SMALLINT owWriteBytePower(int portnum, SMALLINT sendbyte)
if (!owHasPowerDelivery(portnum)) if (!owHasPowerDelivery(portnum))
return FALSE; return FALSE;
if(owTouchByte(portnum,sendbyte) != sendbyte) if (owTouchByte(portnum, sendbyte) != sendbyte)
return FALSE; return FALSE;
if(owLevel(portnum,MODE_STRONG5) != MODE_STRONG5) if (owLevel(portnum, MODE_STRONG5) != MODE_STRONG5)
return FALSE; return FALSE;
return TRUE; return TRUE;
...@@ -363,10 +370,10 @@ SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse) ...@@ -363,10 +370,10 @@ SMALLINT owReadBitPower(int portnum, SMALLINT applyPowerResponse)
if (!owHasPowerDelivery(portnum)) if (!owHasPowerDelivery(portnum))
return FALSE; return FALSE;
if(owTouchBit(portnum,0x01) != applyPowerResponse) if (owTouchBit(portnum, 0x01) != applyPowerResponse)
return FALSE; return FALSE;
if(owLevel(portnum,MODE_STRONG5) != MODE_STRONG5) if (owLevel(portnum, MODE_STRONG5) != MODE_STRONG5)
return FALSE; return FALSE;
return TRUE; return TRUE;
...@@ -389,9 +396,9 @@ SMALLINT owReadBytePower(int portnum) ...@@ -389,9 +396,9 @@ SMALLINT owReadBytePower(int portnum)
if (!owHasPowerDelivery(portnum)) if (!owHasPowerDelivery(portnum))
return FALSE; return FALSE;
getbyte = owTouchByte(portnum,0xFF); getbyte = owTouchByte(portnum, 0xFF);
if (owLevel(portnum,MODE_STRONG5) != MODE_STRONG5) if (owLevel(portnum, MODE_STRONG5) != MODE_STRONG5)
return FALSE; return FALSE;
return getbyte; return getbyte;
......
This diff is collapsed.
This diff is collapsed.
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
extern sockit_owm_state sockit_owm; extern sockit_owm_state sockit_owm;
// local function prototypes // local function prototypes
SMALLINT owAcquire(int,char *); SMALLINT owAcquire(int, char *);
void owRelease(int); void owRelease(int);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
This diff is collapsed.
...@@ -45,34 +45,31 @@ ...@@ -45,34 +45,31 @@
// FALSE(0) could not read the temperature, perhaps device is not // FALSE(0) could not read the temperature, perhaps device is not
// in contact // in contact
// //
int ReadTemperature10(int portnum, uchar *SerialNum, float *Temp) int ReadTemperature10(int portnum, uchar * SerialNum, float *Temp)
{ {
uchar rt=FALSE; uchar rt = FALSE;
uchar send_block[30],lastcrc8 = 0; uchar send_block[30], lastcrc8 = 0;
int send_cnt, tsht, i, loop=0; int send_cnt, tsht, i, loop = 0;
float tmp,cr,cpc; float tmp, cr, cpc;
int power = 0; int power = 0;
// set the device serial number to the counter device // set the device serial number to the counter device
owSerialNum(portnum,SerialNum,FALSE); owSerialNum(portnum, SerialNum, FALSE);
for (loop = 0; loop < 2; loop ++) for (loop = 0; loop < 2; loop++) {
{
// check if the chip is connected to VDD // check if the chip is connected to VDD
if (owAccess(portnum)) if (owAccess(portnum)) {
{ owWriteByte(portnum, 0xB4);
owWriteByte(portnum,0xB4);
power = owReadByte(portnum); power = owReadByte(portnum);
} }
// access the device // access the device
if (owAccess(portnum)) if (owAccess(portnum)) {
{
// send the convert command and if nesessary start power delivery // send the convert command and if nesessary start power delivery
if (power) { if (power) {
if (!owWriteBytePower(portnum,0x44)) if (!owWriteBytePower(portnum, 0x44))
return FALSE; return FALSE;
} else { } else {
if (!owWriteByte(portnum,0x44)) if (!owWriteByte(portnum, 0x44))
return FALSE; return FALSE;
} }
...@@ -80,13 +77,12 @@ int ReadTemperature10(int portnum, uchar *SerialNum, float *Temp) ...@@ -80,13 +77,12 @@ int ReadTemperature10(int portnum, uchar *SerialNum, float *Temp)
msDelay(1000); msDelay(1000);
// turn off the 1-Wire Net strong pull-up // turn off the 1-Wire Net strong pull-up
if (power) { if (power) {
if (owLevel(portnum,MODE_NORMAL) != MODE_NORMAL) if (owLevel(portnum, MODE_NORMAL) !=
MODE_NORMAL)
return FALSE; return FALSE;
} }
// access the device // access the device
if (owAccess(portnum)) if (owAccess(portnum)) {
{
// create a block to send that reads the temperature // create a block to send that reads the temperature
// read scratchpad command // read scratchpad command
send_cnt = 0; send_cnt = 0;
...@@ -96,30 +92,35 @@ int ReadTemperature10(int portnum, uchar *SerialNum, float *Temp) ...@@ -96,30 +92,35 @@ int ReadTemperature10(int portnum, uchar *SerialNum, float *Temp)
send_block[send_cnt++] = 0xFF; send_block[send_cnt++] = 0xFF;
// now send the block // now send the block
if (owBlock(portnum,FALSE,send_block,send_cnt)) if (owBlock
{ (portnum, FALSE, send_block, send_cnt)) {
// initialize the CRC8 // initialize the CRC8
setcrc8(portnum,0); setcrc8(portnum, 0);
// perform the CRC8 on the last 8 bytes of packet // perform the CRC8 on the last 8 bytes of packet
for (i = send_cnt - 9; i < send_cnt; i++) for (i = send_cnt - 9; i < send_cnt;
lastcrc8 = docrc8(portnum,send_block[i]); i++)
lastcrc8 =
docrc8(portnum,
send_block[i]);
// verify CRC8 is correct // verify CRC8 is correct
if (lastcrc8 == 0x00) if (lastcrc8 == 0x00) {
{
// calculate the high-res temperature // calculate the high-res temperature
tsht = send_block[1]/2; tsht = send_block[1] / 2;
if (send_block[2] & 0x01) if (send_block[2] & 0x01)
tsht |= -128; tsht |= -128;
tmp = (float)(tsht); tmp = (float)(tsht);
cr = send_block[7]; cr = send_block[7];
cpc = send_block[8]; cpc = send_block[8];
if (((cpc - cr) == 1) && (loop == 0)) if (((cpc - cr) == 1)
&& (loop == 0))
continue; continue;
if (cpc == 0) if (cpc == 0)
return FALSE; return FALSE;
else else
tmp = tmp - (float)0.25 + (cpc - cr)/cpc; tmp =
tmp - (float)0.25 +
(cpc - cr) / cpc;
*Temp = tmp; *Temp = tmp;
// success // success
......
...@@ -28,4 +28,4 @@ ...@@ -28,4 +28,4 @@
// //
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
int ReadTemperature10(int,uchar *,float *); int ReadTemperature10(int, uchar *, float *);
This diff is collapsed.
...@@ -28,4 +28,4 @@ ...@@ -28,4 +28,4 @@
// //
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
uint8_t ReadTemperature28(uint8_t , uint8_t *,int16_t *); uint8_t ReadTemperature28(uint8_t, uint8_t *, int16_t *);
This diff is collapsed.
...@@ -28,4 +28,4 @@ ...@@ -28,4 +28,4 @@
// //
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
int ReadTemperature42(int,uchar *,int *,int *); int ReadTemperature42(int, uchar *, int *, int *);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment