Lines Matching refs:dev

50 static u16 get_reg_init_bus(struct eth_device *dev, int regno)  in get_reg_init_bus()  argument
53 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in get_reg_init_bus()
54 uint8_t volatile * const iob = (uint8_t volatile * const)dev->iobase; in get_reg_init_bus()
67 static u16 get_reg(struct eth_device *dev, int regno) in get_reg() argument
69 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in get_reg()
75 static void put_reg(struct eth_device *dev, int regno, u16 val) in put_reg() argument
77 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in put_reg()
82 static void cs8900_reset(struct eth_device *dev) in cs8900_reset() argument
88 put_reg(dev, PP_SelfCTL, get_reg(dev, PP_SelfCTL) | PP_SelfCTL_Reset); in cs8900_reset()
95 while ((((us = get_reg_init_bus(dev, PP_SelfSTAT)) & in cs8900_reset()
100 static void cs8900_reginit(struct eth_device *dev) in cs8900_reginit() argument
103 put_reg(dev, PP_RxCTL, in cs8900_reginit()
106 put_reg(dev, PP_RxCFG, 0); in cs8900_reginit()
108 put_reg(dev, PP_TxCFG, 0); in cs8900_reginit()
110 put_reg(dev, PP_BufCFG, 0); in cs8900_reginit()
112 put_reg(dev, PP_LineCTL, PP_LineCTL_Rx | PP_LineCTL_Tx); in cs8900_reginit()
115 void cs8900_get_enetaddr(struct eth_device *dev) in cs8900_get_enetaddr() argument
120 if (get_reg_init_bus(dev, PP_ChipID) != 0x630e) in cs8900_get_enetaddr()
122 cs8900_reset(dev); in cs8900_get_enetaddr()
123 if ((get_reg(dev, PP_SelfSTAT) & in cs8900_get_enetaddr()
131 Addr = get_reg(dev, PP_IA + i * 2); in cs8900_get_enetaddr()
132 dev->enetaddr[i * 2] = Addr & 0xFF; in cs8900_get_enetaddr()
133 dev->enetaddr[i * 2 + 1] = Addr >> 8; in cs8900_get_enetaddr()
138 void cs8900_halt(struct eth_device *dev) in cs8900_halt() argument
141 put_reg(dev, PP_LineCTL, 0); in cs8900_halt()
144 get_reg_init_bus(dev, PP_ChipID); in cs8900_halt()
147 static int cs8900_init(struct eth_device *dev, bd_t * bd) in cs8900_init() argument
149 uchar *enetaddr = dev->enetaddr; in cs8900_init()
153 id = get_reg_init_bus(dev, PP_ChipID); in cs8900_init()
160 cs8900_reset (dev); in cs8900_init()
162 put_reg(dev, PP_IA + 0, enetaddr[0] | (enetaddr[1] << 8)); in cs8900_init()
163 put_reg(dev, PP_IA + 2, enetaddr[2] | (enetaddr[3] << 8)); in cs8900_init()
164 put_reg(dev, PP_IA + 4, enetaddr[4] | (enetaddr[5] << 8)); in cs8900_init()
166 cs8900_reginit(dev); in cs8900_init()
171 static int cs8900_recv(struct eth_device *dev) in cs8900_recv() argument
178 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in cs8900_recv()
180 status = get_reg(dev, PP_RER); in cs8900_recv()
201 static int cs8900_send(struct eth_device *dev, void *packet, int length) in cs8900_send() argument
206 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in cs8900_send()
214 if ((get_reg(dev, PP_BusSTAT) & PP_BusSTAT_TxRDY) == 0) { in cs8900_send()
220 cs8900_reset(dev); in cs8900_send()
221 cs8900_reginit(dev); in cs8900_send()
232 while ((s = get_reg(dev, PP_TER) & ~0x1F) == 0) { in cs8900_send()
245 static void cs8900_e2prom_ready(struct eth_device *dev) in cs8900_e2prom_ready() argument
247 while (get_reg(dev, PP_SelfSTAT) & SI_BUSY) in cs8900_e2prom_ready()
255 int cs8900_e2prom_read(struct eth_device *dev, in cs8900_e2prom_read() argument
258 cs8900_e2prom_ready(dev); in cs8900_e2prom_read()
259 put_reg(dev, PP_EECMD, EEPROM_READ_CMD | addr); in cs8900_e2prom_read()
260 cs8900_e2prom_ready(dev); in cs8900_e2prom_read()
261 *value = get_reg(dev, PP_EEData); in cs8900_e2prom_read()
271 int cs8900_e2prom_write(struct eth_device *dev, u8 addr, u16 value) in cs8900_e2prom_write() argument
273 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
274 put_reg(dev, PP_EECMD, EEPROM_WRITE_EN); in cs8900_e2prom_write()
275 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
276 put_reg(dev, PP_EEData, value); in cs8900_e2prom_write()
277 put_reg(dev, PP_EECMD, EEPROM_WRITE_CMD | addr); in cs8900_e2prom_write()
278 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
279 put_reg(dev, PP_EECMD, EEPROM_WRITE_DIS); in cs8900_e2prom_write()
280 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
287 struct eth_device *dev; in cs8900_initialize() local
290 dev = malloc(sizeof(*dev)); in cs8900_initialize()
291 if (!dev) { in cs8900_initialize()
294 memset(dev, 0, sizeof(*dev)); in cs8900_initialize()
298 free(dev); in cs8900_initialize()
304 dev->iobase = base_addr; in cs8900_initialize()
305 dev->priv = priv; in cs8900_initialize()
306 dev->init = cs8900_init; in cs8900_initialize()
307 dev->halt = cs8900_halt; in cs8900_initialize()
308 dev->send = cs8900_send; in cs8900_initialize()
309 dev->recv = cs8900_recv; in cs8900_initialize()
312 cs8900_get_enetaddr(dev); in cs8900_initialize()
314 sprintf(dev->name, "%s-%hu", CS8900_DRIVERNAME, dev_num); in cs8900_initialize()
316 eth_register(dev); in cs8900_initialize()