Lines Matching refs:dev
52 static u16 get_reg_init_bus(struct eth_device *dev, int regno) in get_reg_init_bus() argument
55 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in get_reg_init_bus()
56 uint8_t volatile * const iob = (uint8_t volatile * const)dev->iobase; in get_reg_init_bus()
69 static u16 get_reg(struct eth_device *dev, int regno) in get_reg() argument
71 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in get_reg()
77 static void put_reg(struct eth_device *dev, int regno, u16 val) in put_reg() argument
79 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in put_reg()
84 static void cs8900_reset(struct eth_device *dev) in cs8900_reset() argument
90 put_reg(dev, PP_SelfCTL, get_reg(dev, PP_SelfCTL) | PP_SelfCTL_Reset); in cs8900_reset()
97 while ((((us = get_reg_init_bus(dev, PP_SelfSTAT)) & in cs8900_reset()
102 static void cs8900_reginit(struct eth_device *dev) in cs8900_reginit() argument
105 put_reg(dev, PP_RxCTL, in cs8900_reginit()
108 put_reg(dev, PP_RxCFG, 0); in cs8900_reginit()
110 put_reg(dev, PP_TxCFG, 0); in cs8900_reginit()
112 put_reg(dev, PP_BufCFG, 0); in cs8900_reginit()
114 put_reg(dev, PP_LineCTL, PP_LineCTL_Rx | PP_LineCTL_Tx); in cs8900_reginit()
117 void cs8900_get_enetaddr(struct eth_device *dev) in cs8900_get_enetaddr() argument
122 if (get_reg_init_bus(dev, PP_ChipID) != 0x630e) in cs8900_get_enetaddr()
124 cs8900_reset(dev); in cs8900_get_enetaddr()
125 if ((get_reg(dev, PP_SelfSTAT) & in cs8900_get_enetaddr()
133 Addr = get_reg(dev, PP_IA + i * 2); in cs8900_get_enetaddr()
134 dev->enetaddr[i * 2] = Addr & 0xFF; in cs8900_get_enetaddr()
135 dev->enetaddr[i * 2 + 1] = Addr >> 8; in cs8900_get_enetaddr()
140 void cs8900_halt(struct eth_device *dev) in cs8900_halt() argument
143 put_reg(dev, PP_LineCTL, 0); in cs8900_halt()
146 get_reg_init_bus(dev, PP_ChipID); in cs8900_halt()
149 static int cs8900_init(struct eth_device *dev, struct bd_info * bd) in cs8900_init() argument
151 uchar *enetaddr = dev->enetaddr; in cs8900_init()
155 id = get_reg_init_bus(dev, PP_ChipID); in cs8900_init()
162 cs8900_reset (dev); in cs8900_init()
164 put_reg(dev, PP_IA + 0, enetaddr[0] | (enetaddr[1] << 8)); in cs8900_init()
165 put_reg(dev, PP_IA + 2, enetaddr[2] | (enetaddr[3] << 8)); in cs8900_init()
166 put_reg(dev, PP_IA + 4, enetaddr[4] | (enetaddr[5] << 8)); in cs8900_init()
168 cs8900_reginit(dev); in cs8900_init()
173 static int cs8900_recv(struct eth_device *dev) in cs8900_recv() argument
180 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in cs8900_recv()
182 status = get_reg(dev, PP_RER); in cs8900_recv()
203 static int cs8900_send(struct eth_device *dev, void *packet, int length) in cs8900_send() argument
208 struct cs8900_priv *priv = (struct cs8900_priv *)(dev->priv); in cs8900_send()
216 if ((get_reg(dev, PP_BusSTAT) & PP_BusSTAT_TxRDY) == 0) { in cs8900_send()
222 cs8900_reset(dev); in cs8900_send()
223 cs8900_reginit(dev); in cs8900_send()
234 while ((s = get_reg(dev, PP_TER) & ~0x1F) == 0) { in cs8900_send()
247 static void cs8900_e2prom_ready(struct eth_device *dev) in cs8900_e2prom_ready() argument
249 while (get_reg(dev, PP_SelfSTAT) & SI_BUSY) in cs8900_e2prom_ready()
257 int cs8900_e2prom_read(struct eth_device *dev, in cs8900_e2prom_read() argument
260 cs8900_e2prom_ready(dev); in cs8900_e2prom_read()
261 put_reg(dev, PP_EECMD, EEPROM_READ_CMD | addr); in cs8900_e2prom_read()
262 cs8900_e2prom_ready(dev); in cs8900_e2prom_read()
263 *value = get_reg(dev, PP_EEData); in cs8900_e2prom_read()
273 int cs8900_e2prom_write(struct eth_device *dev, u8 addr, u16 value) in cs8900_e2prom_write() argument
275 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
276 put_reg(dev, PP_EECMD, EEPROM_WRITE_EN); in cs8900_e2prom_write()
277 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
278 put_reg(dev, PP_EEData, value); in cs8900_e2prom_write()
279 put_reg(dev, PP_EECMD, EEPROM_WRITE_CMD | addr); in cs8900_e2prom_write()
280 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
281 put_reg(dev, PP_EECMD, EEPROM_WRITE_DIS); in cs8900_e2prom_write()
282 cs8900_e2prom_ready(dev); in cs8900_e2prom_write()
289 struct eth_device *dev; in cs8900_initialize() local
292 dev = malloc(sizeof(*dev)); in cs8900_initialize()
293 if (!dev) { in cs8900_initialize()
296 memset(dev, 0, sizeof(*dev)); in cs8900_initialize()
300 free(dev); in cs8900_initialize()
306 dev->iobase = base_addr; in cs8900_initialize()
307 dev->priv = priv; in cs8900_initialize()
308 dev->init = cs8900_init; in cs8900_initialize()
309 dev->halt = cs8900_halt; in cs8900_initialize()
310 dev->send = cs8900_send; in cs8900_initialize()
311 dev->recv = cs8900_recv; in cs8900_initialize()
314 cs8900_get_enetaddr(dev); in cs8900_initialize()
316 sprintf(dev->name, "%s-%hu", CS8900_DRIVERNAME, dev_num); in cs8900_initialize()
318 eth_register(dev); in cs8900_initialize()