hp100.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:89k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2. ** hp100.c 
  3. ** HP CASCADE Architecture Driver for 100VG-AnyLan Network Adapters
  4. **
  5. ** $Id: hp100.c,v 1.58 2001/09/24 18:03:01 perex Exp perex $
  6. **
  7. ** Based on the HP100 driver written by Jaroslav Kysela <perex@jcu.cz>
  8. ** Extended for new busmaster capable chipsets by 
  9. ** Siegfried "Frieder" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>
  10. **
  11. ** Maintained by: Jaroslav Kysela <perex@suse.cz>
  12. ** 
  13. ** This driver has only been tested with
  14. ** -- HP J2585B 10/100 Mbit/s PCI Busmaster
  15. ** -- HP J2585A 10/100 Mbit/s PCI 
  16. ** -- HP J2970  10 Mbit/s PCI Combo 10base-T/BNC
  17. ** -- HP J2973  10 Mbit/s PCI 10base-T
  18. ** -- HP J2573  10/100 ISA
  19. ** -- Compex ReadyLink ENET100-VG4  10/100 Mbit/s PCI / EISA
  20. ** -- Compex FreedomLine 100/VG  10/100 Mbit/s ISA / EISA / PCI
  21. ** 
  22. ** but it should also work with the other CASCADE based adapters.
  23. **
  24. ** TODO:
  25. **       -  J2573 seems to hang sometimes when in shared memory mode.
  26. **       -  Mode for Priority TX
  27. **       -  Check PCI registers, performance might be improved?
  28. **       -  To reduce interrupt load in busmaster, one could switch off
  29. **          the interrupts that are used to refill the queues whenever the
  30. **          queues are filled up to more than a certain threshold.
  31. **       -  some updates for EISA version of card
  32. **
  33. **
  34. **   This code is free software; you can redistribute it and/or modify
  35. **   it under the terms of the GNU General Public License as published by
  36. **   the Free Software Foundation; either version 2 of the License, or
  37. **   (at your option) any later version.
  38. **
  39. **   This code is distributed in the hope that it will be useful,
  40. **   but WITHOUT ANY WARRANTY; without even the implied warranty of
  41. **   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  42. **   GNU General Public License for more details.
  43. **
  44. **   You should have received a copy of the GNU General Public License
  45. **   along with this program; if not, write to the Free Software
  46. **   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  47. **
  48. ** 1.57c -> 1.58
  49. **   - used indent to change coding-style
  50. **   - added KTI DP-200 EISA ID
  51. **   - ioremap is also used for low (<1MB) memory (multi-architecture support)
  52. **
  53. ** 1.57b -> 1.57c - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  54. **   - release resources on failure in init_module
  55. **
  56. ** 1.57 -> 1.57b - Jean II
  57. **   - fix spinlocks, SMP is now working !
  58. **
  59. ** 1.56 -> 1.57
  60. **   - updates for new PCI interface for 2.1 kernels
  61. **
  62. ** 1.55 -> 1.56
  63. **   - removed printk in misc. interrupt and update statistics to allow
  64. **     monitoring of card status
  65. **   - timing changes in xmit routines, relogin to 100VG hub added when
  66. **     driver does reset
  67. **   - included fix for Compex FreedomLine PCI adapter
  68. ** 
  69. ** 1.54 -> 1.55
  70. **   - fixed bad initialization in init_module
  71. **   - added Compex FreedomLine adapter
  72. **   - some fixes in card initialization
  73. **
  74. ** 1.53 -> 1.54
  75. **   - added hardware multicast filter support (doesn't work)
  76. **   - little changes in hp100_sense_lan routine 
  77. **     - added support for Coax and AUI (J2970)
  78. **   - fix for multiple cards and hp100_mode parameter (insmod)
  79. **   - fix for shared IRQ 
  80. **
  81. ** 1.52 -> 1.53
  82. **   - fixed bug in multicast support
  83. **
  84. */
  85. #define HP100_DEFAULT_PRIORITY_TX 0
  86. #undef HP100_DEBUG
  87. #undef HP100_DEBUG_B /* Trace  */
  88. #undef HP100_DEBUG_BM /* Debug busmaster code (PDL stuff) */
  89. #undef HP100_DEBUG_TRAINING /* Debug login-to-hub procedure */
  90. #undef HP100_DEBUG_TX
  91. #undef HP100_DEBUG_IRQ
  92. #undef HP100_DEBUG_RX
  93. #undef HP100_MULTICAST_FILTER /* Need to be debugged... */
  94. #include <linux/version.h>
  95. #include <linux/module.h>
  96. #include <linux/kernel.h>
  97. #include <linux/sched.h>
  98. #include <linux/string.h>
  99. #include <linux/errno.h>
  100. #include <linux/ioport.h>
  101. #include <linux/slab.h>
  102. #include <linux/interrupt.h>
  103. #include <linux/pci.h>
  104. #include <linux/spinlock.h>
  105. #include <asm/bitops.h>
  106. #include <asm/io.h>
  107. #include <linux/netdevice.h>
  108. #include <linux/etherdevice.h>
  109. #include <linux/skbuff.h>
  110. #include <linux/types.h>
  111. #include <linux/config.h> /* for CONFIG_PCI */
  112. #include <linux/delay.h>
  113. #include <linux/init.h>
  114. #define LINUX_2_1
  115. typedef struct net_device_stats hp100_stats_t;
  116. EXPORT_NO_SYMBOLS;
  117. #include "hp100.h"
  118. /*
  119.  *  defines
  120.  */
  121. #define HP100_BUS_ISA     0
  122. #define HP100_BUS_EISA    1
  123. #define HP100_BUS_PCI     2
  124. #ifndef PCI_DEVICE_ID_HP_J2585B
  125. #define PCI_DEVICE_ID_HP_J2585B 0x1031
  126. #endif
  127. #ifndef PCI_VENDOR_ID_COMPEX
  128. #define PCI_VENDOR_ID_COMPEX 0x11f6
  129. #endif
  130. #ifndef PCI_DEVICE_ID_COMPEX_ENET100VG4
  131. #define PCI_DEVICE_ID_COMPEX_ENET100VG4 0x0112
  132. #endif
  133. #ifndef PCI_VENDOR_ID_COMPEX2
  134. #define PCI_VENDOR_ID_COMPEX2 0x101a
  135. #endif
  136. #ifndef PCI_DEVICE_ID_COMPEX2_100VG
  137. #define PCI_DEVICE_ID_COMPEX2_100VG 0x0005
  138. #endif
  139. #define HP100_REGION_SIZE 0x20 /* for ioports */
  140. #define HP100_MAX_PACKET_SIZE (1536+4)
  141. #define HP100_MIN_PACKET_SIZE 60
  142. #ifndef HP100_DEFAULT_RX_RATIO
  143. /* default - 75% onboard memory on the card are used for RX packets */
  144. #define HP100_DEFAULT_RX_RATIO 75
  145. #endif
  146. #ifndef HP100_DEFAULT_PRIORITY_TX
  147. /* default - don't enable transmit outgoing packets as priority */
  148. #define HP100_DEFAULT_PRIORITY_TX 0
  149. #endif
  150. /*
  151.  *  structures
  152.  */
  153. struct hp100_eisa_id {
  154. u_int id;
  155. const char *name;
  156. u_char bus;
  157. };
  158. struct hp100_pci_id {
  159. u_short vendor;
  160. u_short device;
  161. };
  162. struct hp100_private {
  163. struct hp100_eisa_id *id;
  164. spinlock_t lock;
  165. u_short chip;
  166. u_short soft_model;
  167. u_int memory_size;
  168. u_int virt_memory_size;
  169. u_short rx_ratio; /* 1 - 99 */
  170. u_short priority_tx; /* != 0 - priority tx */
  171. u_short mode; /* PIO, Shared Mem or Busmaster */
  172. u_char bus;
  173. struct pci_dev *pci_dev;
  174. short mem_mapped; /* memory mapped access */
  175. void *mem_ptr_virt; /* virtual memory mapped area, maybe NULL */
  176. unsigned long mem_ptr_phys; /* physical memory mapped area */
  177. short lan_type; /* 10Mb/s, 100Mb/s or -1 (error) */
  178. int hub_status; /* was login to hub successful? */
  179. u_char mac1_mode;
  180. u_char mac2_mode;
  181. u_char hash_bytes[8];
  182. hp100_stats_t stats;
  183. /* Rings for busmaster mode: */
  184. hp100_ring_t *rxrhead; /* Head (oldest) index into rxring */
  185. hp100_ring_t *rxrtail; /* Tail (newest) index into rxring */
  186. hp100_ring_t *txrhead; /* Head (oldest) index into txring */
  187. hp100_ring_t *txrtail; /* Tail (newest) index into txring */
  188. hp100_ring_t rxring[MAX_RX_PDL];
  189. hp100_ring_t txring[MAX_TX_PDL];
  190. u_int *page_vaddr; /* Virtual address of allocated page */
  191. u_int *page_vaddr_algn; /* Aligned virtual address of allocated page */
  192. int rxrcommit; /* # Rx PDLs commited to adapter */
  193. int txrcommit; /* # Tx PDLs commited to adapter */
  194. };
  195. /*
  196.  *  variables
  197.  */
  198. static struct hp100_eisa_id hp100_eisa_ids[] = {
  199. /* 10/100 EISA card with revision A Cascade chip */
  200. {0x80F1F022, "HP J2577 rev A", HP100_BUS_EISA},
  201. /* 10/100 ISA card with revision A Cascade chip */
  202. {0x50F1F022, "HP J2573 rev A", HP100_BUS_ISA},
  203. /* 10 only EISA card with Cascade chip */
  204. {0x2019F022, "HP 27248B", HP100_BUS_EISA},
  205. /* 10/100 EISA card with Cascade chip */
  206. {0x4019F022, "HP J2577", HP100_BUS_EISA},
  207. /* 10/100 ISA card with Cascade chip */
  208. {0x5019F022, "HP J2573", HP100_BUS_ISA},
  209. /* 10/100 PCI card - old J2585A */
  210. {0x1030103c, "HP J2585A", HP100_BUS_PCI},
  211. /* 10/100 PCI card - new J2585B - master capable */
  212. {0x1041103c, "HP J2585B", HP100_BUS_PCI},
  213. /* 10 Mbit Combo Adapter */
  214. {0x1042103c, "HP J2970", HP100_BUS_PCI},
  215. /* 10 Mbit 10baseT Adapter */
  216. {0x1040103c, "HP J2973", HP100_BUS_PCI},
  217. /* 10/100 EISA card from Compex */
  218. {0x0103180e, "ReadyLink ENET100-VG4", HP100_BUS_EISA},
  219. /* 10/100 EISA card from Compex - FreedomLine (sq5bpf) */
  220. /* Note: plhbrod@mbox.vol.cz reported that same ID have ISA */
  221. /*       version of adapter, too... */
  222. {0x0104180e, "FreedomLine 100/VG", HP100_BUS_EISA},
  223. /* 10/100 PCI card from Compex - FreedomLine
  224.  *
  225.  * I think this card doesn't like aic7178 scsi controller, but
  226.  * I haven't tested this much. It works fine on diskless machines.
  227.  *                            Jacek Lipkowski <sq5bpf@acid.ch.pw.edu.pl>
  228.  */
  229. {0x021211f6, "FreedomLine 100/VG", HP100_BUS_PCI},
  230. /* 10/100 PCI card from Compex (J2585A compatible) */
  231. {0x011211f6, "ReadyLink ENET100-VG4", HP100_BUS_PCI},
  232. /* 10/100 PCI card from KTI */
  233. {0x40008e2e, "KTI DP-200", HP100_BUS_PCI }
  234. };
  235. #define HP100_EISA_IDS_SIZE (sizeof(hp100_eisa_ids)/sizeof(struct hp100_eisa_id))
  236. #ifdef CONFIG_PCI
  237. static struct hp100_pci_id hp100_pci_ids[] = {
  238. {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A},
  239. {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B},
  240. {PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_ENET100VG4},
  241. {PCI_VENDOR_ID_COMPEX2, PCI_DEVICE_ID_COMPEX2_100VG}
  242. };
  243. #endif
  244. #define HP100_PCI_IDS_SIZE (sizeof(hp100_pci_ids)/sizeof(struct hp100_pci_id))
  245. #if LINUX_VERSION_CODE >= 0x20400
  246. static struct pci_device_id hp100_pci_tbl[] __initdata = {
  247. {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A, PCI_ANY_ID, PCI_ANY_ID,},
  248. {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B, PCI_ANY_ID, PCI_ANY_ID,},
  249. {PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_ENET100VG4, PCI_ANY_ID, PCI_ANY_ID,},
  250. {PCI_VENDOR_ID_COMPEX2, PCI_DEVICE_ID_COMPEX2_100VG, PCI_ANY_ID, PCI_ANY_ID,},
  251. {} /* Terminating entry */
  252. };
  253. MODULE_DEVICE_TABLE(pci, hp100_pci_tbl);
  254. #endif /* LINUX_VERSION_CODE >= 0x20400 */
  255. static int hp100_rx_ratio = HP100_DEFAULT_RX_RATIO;
  256. static int hp100_priority_tx = HP100_DEFAULT_PRIORITY_TX;
  257. static int hp100_mode = 1;
  258. MODULE_PARM(hp100_rx_ratio, "1i");
  259. MODULE_PARM(hp100_priority_tx, "1i");
  260. MODULE_PARM(hp100_mode, "1i");
  261. /*
  262.  *  prototypes
  263.  */
  264. static int hp100_probe1(struct net_device *dev, int ioaddr, u_char bus,
  265. struct pci_dev *pci_dev);
  266. static int hp100_open(struct net_device *dev);
  267. static int hp100_close(struct net_device *dev);
  268. static int hp100_start_xmit(struct sk_buff *skb, struct net_device *dev);
  269. static int hp100_start_xmit_bm(struct sk_buff *skb,
  270.        struct net_device *dev);
  271. static void hp100_rx(struct net_device *dev);
  272. static hp100_stats_t *hp100_get_stats(struct net_device *dev);
  273. static void hp100_misc_interrupt(struct net_device *dev);
  274. static void hp100_update_stats(struct net_device *dev);
  275. static void hp100_clear_stats(struct hp100_private *lp, int ioaddr);
  276. static void hp100_set_multicast_list(struct net_device *dev);
  277. static void hp100_interrupt(int irq, void *dev_id, struct pt_regs *regs);
  278. static void hp100_start_interface(struct net_device *dev);
  279. static void hp100_stop_interface(struct net_device *dev);
  280. static void hp100_load_eeprom(struct net_device *dev, u_short ioaddr);
  281. static int hp100_sense_lan(struct net_device *dev);
  282. static int hp100_login_to_vg_hub(struct net_device *dev,
  283.  u_short force_relogin);
  284. static int hp100_down_vg_link(struct net_device *dev);
  285. static void hp100_cascade_reset(struct net_device *dev, u_short enable);
  286. static void hp100_BM_shutdown(struct net_device *dev);
  287. static void hp100_mmuinit(struct net_device *dev);
  288. static void hp100_init_pdls(struct net_device *dev);
  289. static int hp100_init_rxpdl(struct net_device *dev,
  290.     register hp100_ring_t * ringptr,
  291.     register u_int * pdlptr);
  292. static int hp100_init_txpdl(struct net_device *dev,
  293.     register hp100_ring_t * ringptr,
  294.     register u_int * pdlptr);
  295. static void hp100_rxfill(struct net_device *dev);
  296. static void hp100_hwinit(struct net_device *dev);
  297. static void hp100_clean_txring(struct net_device *dev);
  298. #ifdef HP100_DEBUG
  299. static void hp100_RegisterDump(struct net_device *dev);
  300. #endif
  301. /* TODO: This function should not really be needed in a good design... */
  302. static void wait(void)
  303. {
  304. mdelay(1);
  305. }
  306. /*
  307.  *  probe functions
  308.  *  These functions should - if possible - avoid doing write operations
  309.  *  since this could cause problems when the card is not installed.
  310.  */
  311. int __init hp100_probe(struct net_device *dev)
  312. {
  313. int base_addr = dev ? dev->base_addr : 0;
  314. int ioaddr = 0;
  315. #ifdef CONFIG_PCI
  316. int pci_start_index = 0;
  317. #endif
  318. #ifdef HP100_DEBUG_B
  319. hp100_outw(0x4200, TRACE);
  320. printk("hp100: %s: proben", dev->name);
  321. #endif
  322. if (base_addr > 0xff) { /* Check a single specified location. */
  323. if (check_region(base_addr, HP100_REGION_SIZE))
  324. return -EINVAL;
  325. if (base_addr < 0x400)
  326. return hp100_probe1(dev, base_addr, HP100_BUS_ISA,
  327.     NULL);
  328. if (EISA_bus && base_addr >= 0x1c38 && ((base_addr - 0x1c38) & 0x3ff) == 0)
  329. return hp100_probe1(dev, base_addr, HP100_BUS_EISA, NULL);
  330. #ifdef CONFIG_PCI
  331. printk("hp100: %s: You must specify card # in i/o address parameter for PCI bus...", dev->name);
  332. #else
  333. return -ENODEV;
  334. #endif
  335. } else
  336. #ifdef CONFIG_PCI
  337. if (base_addr > 0 && base_addr < 8 + 1)
  338. pci_start_index = 0x100 | (base_addr - 1);
  339.   else
  340. #endif
  341. if (base_addr != 0)
  342. return -ENXIO;
  343. /* First: scan PCI bus(es) */
  344. #ifdef CONFIG_PCI
  345. if (pcibios_present()) {
  346. int pci_index;
  347. struct pci_dev *pci_dev = NULL;
  348. int pci_id_index;
  349. u_short pci_command;
  350. #ifdef HP100_DEBUG_PCI
  351. printk("hp100: %s: PCI BIOS is present, checking for devices..n", dev->name);
  352. #endif
  353. pci_index = 0;
  354. for (pci_id_index = 0; pci_id_index < HP100_PCI_IDS_SIZE;
  355.      pci_id_index++) {
  356. while ((pci_dev = pci_find_device(hp100_pci_ids[pci_id_index].vendor,
  357.   hp100_pci_ids[pci_id_index].device,
  358.   pci_dev)) != NULL) {
  359. if (pci_index < (pci_start_index & 7)) {
  360. pci_index++;
  361. continue;
  362. }
  363. if (pci_enable_device(pci_dev))
  364. continue;
  365. /* found... */
  366. ioaddr = pci_resource_start(pci_dev, 0);
  367. if (check_region(ioaddr, HP100_REGION_SIZE))
  368. continue;
  369. pci_read_config_word(pci_dev, PCI_COMMAND, &pci_command);
  370. if (!(pci_command & PCI_COMMAND_IO)) {
  371. #ifdef HP100_DEBUG
  372. printk("hp100: %s: PCI I/O Bit has not been set. Setting...n", dev->name);
  373. #endif
  374. pci_command |= PCI_COMMAND_IO;
  375. pci_write_config_word(pci_dev, PCI_COMMAND, pci_command);
  376. }
  377. if (!(pci_command & PCI_COMMAND_MASTER)) {
  378. #ifdef HP100_DEBUG
  379. printk("hp100: %s: PCI Master Bit has not been set. Setting...n", dev->name);
  380. #endif
  381. pci_command |= PCI_COMMAND_MASTER;
  382. pci_write_config_word(pci_dev, PCI_COMMAND, pci_command);
  383. }
  384. #ifdef HP100_DEBUG
  385. printk("hp100: %s: PCI adapter found at 0x%xn", dev->name, ioaddr);
  386. #endif
  387. if (hp100_probe1(dev, ioaddr, HP100_BUS_PCI, pci_dev) == 0)
  388. return 0;
  389. }
  390. }
  391. }
  392. if (pci_start_index > 0)
  393. return -ENODEV;
  394. #endif /* CONFIG_PCI */
  395. /* Second: Probe all EISA possible port regions (if EISA bus present) */
  396. for (ioaddr = 0x1c38; EISA_bus && ioaddr < 0x10000; ioaddr += 0x400) {
  397. if (check_region(ioaddr, HP100_REGION_SIZE))
  398. continue;
  399. if (hp100_probe1(dev, ioaddr, HP100_BUS_EISA, NULL) == 0)
  400. return 0;
  401. }
  402. /* Third: Probe all ISA possible port regions */
  403. for (ioaddr = 0x100; ioaddr < 0x400; ioaddr += 0x20) {
  404. if (check_region(ioaddr, HP100_REGION_SIZE))
  405. continue;
  406. if (hp100_probe1(dev, ioaddr, HP100_BUS_ISA, NULL) == 0)
  407. return 0;
  408. }
  409. return -ENODEV;
  410. }
  411. static int __init hp100_probe1(struct net_device *dev, int ioaddr,
  412.        u_char bus, struct pci_dev *pci_dev)
  413. {
  414. int i;
  415. u_char uc, uc_1;
  416. u_int eisa_id;
  417. u_int chip;
  418. u_int memory_size = 0, virt_memory_size = 0;
  419. u_short local_mode, lsw;
  420. short mem_mapped;
  421. unsigned long mem_ptr_phys;
  422. void **mem_ptr_virt;
  423. struct hp100_private *lp;
  424. struct hp100_eisa_id *eid;
  425. #ifdef HP100_DEBUG_B
  426. hp100_outw(0x4201, TRACE);
  427. printk("hp100: %s: probe1n", dev->name);
  428. #endif
  429. if (dev == NULL) {
  430. #ifdef HP100_DEBUG
  431. printk("hp100_probe1: %s: dev == NULL ?n", dev->name);
  432. #endif
  433. return -EIO;
  434. }
  435. if (hp100_inw(HW_ID) != HP100_HW_ID_CASCADE) {
  436. return -ENODEV;
  437. } else {
  438. chip = hp100_inw(PAGING) & HP100_CHIPID_MASK;
  439. #ifdef HP100_DEBUG
  440. if (chip == HP100_CHIPID_SHASTA)
  441. printk("hp100: %s: Shasta Chip detected. (This is a pre 802.12 chip)n", dev->name);
  442. else if (chip == HP100_CHIPID_RAINIER)
  443. printk("hp100: %s: Rainier Chip detected. (This is a pre 802.12 chip)n", dev->name);
  444. else if (chip == HP100_CHIPID_LASSEN)
  445. printk("hp100: %s: Lassen Chip detected.n", dev->name);
  446. else
  447. printk("hp100: %s: Warning: Unknown CASCADE chip (id=0x%.4x).n", dev->name, chip);
  448. #endif
  449. }
  450. dev->base_addr = ioaddr;
  451. hp100_page(ID_MAC_ADDR);
  452. for (i = uc = eisa_id = 0; i < 4; i++) {
  453. eisa_id >>= 8;
  454. uc_1 = hp100_inb(BOARD_ID + i);
  455. eisa_id |= uc_1 << 24;
  456. uc += uc_1;
  457. }
  458. uc += hp100_inb(BOARD_ID + 4);
  459. if (uc != 0xff) { /* bad checksum? */
  460. printk("hp100_probe: %s: bad EISA ID checksum at base port 0x%xn", dev->name, ioaddr);
  461. return -ENODEV;
  462. }
  463. for (i = 0; i < HP100_EISA_IDS_SIZE; i++)
  464. if (hp100_eisa_ids[i].id == eisa_id)
  465. break;
  466. if (i >= HP100_EISA_IDS_SIZE) {
  467. for (i = 0; i < HP100_EISA_IDS_SIZE; i++)
  468. if ((hp100_eisa_ids[i].id & 0xf0ffffff) == (eisa_id & 0xf0ffffff))
  469. break;
  470. if (i >= HP100_EISA_IDS_SIZE) {
  471. printk ("hp100_probe: %s: card at port 0x%x isn't known (id = 0x%x)n", dev->name, ioaddr, eisa_id);
  472. return -ENODEV;
  473. }
  474. }
  475. eid = &hp100_eisa_ids[i];
  476. if ((eid->id & 0x0f000000) < (eisa_id & 0x0f000000)) {
  477. printk("hp100_probe: %s: newer version of card %s at port 0x%x - unsupportedn", dev->name, eid->name, ioaddr);
  478. return -ENODEV;
  479. }
  480. for (i = uc = 0; i < 7; i++)
  481. uc += hp100_inb(LAN_ADDR + i);
  482. if (uc != 0xff) {
  483. printk("hp100_probe: %s: bad lan address checksum (card %s at port 0x%x)n", dev->name, eid->name, ioaddr);
  484. return -EIO;
  485. }
  486. /* Make sure, that all registers are correctly updated... */
  487. hp100_load_eeprom(dev, ioaddr);
  488. wait();
  489. /*
  490.  * Determine driver operation mode
  491.  *
  492.  * Use the variable "hp100_mode" upon insmod or as kernel parameter to
  493.  * force driver modes:
  494.  * hp100_mode=1 -> default, use busmaster mode if configured.
  495.  * hp100_mode=2 -> enable shared memory mode 
  496.  * hp100_mode=3 -> force use of i/o mapped mode.
  497.  * hp100_mode=4 -> same as 1, but re-set the enable bit on the card.
  498.  */
  499. /*
  500.  * LSW values:
  501.  *   0x2278 -> J2585B, PnP shared memory mode
  502.  *   0x2270 -> J2585B, shared memory mode, 0xdc000
  503.  *   0xa23c -> J2585B, I/O mapped mode
  504.  *   0x2240 -> EISA COMPEX, BusMaster (Shasta Chip)
  505.  *   0x2220 -> EISA HP, I/O (Shasta Chip)
  506.  *   0x2260 -> EISA HP, BusMaster (Shasta Chip)
  507.  */
  508. #if 0
  509. local_mode = 0x2270;
  510. hp100_outw(0xfefe, OPTION_LSW);
  511. hp100_outw(local_mode | HP100_SET_LB | HP100_SET_HB, OPTION_LSW);
  512. #endif
  513. /* hp100_mode value maybe used in future by another card */
  514. local_mode = hp100_mode;
  515. if (local_mode < 1 || local_mode > 4)
  516. local_mode = 1; /* default */
  517. #ifdef HP100_DEBUG
  518. printk("hp100: %s: original LSW = 0x%xn", dev->name,
  519.        hp100_inw(OPTION_LSW));
  520. #endif
  521. if (local_mode == 3) {
  522. hp100_outw(HP100_MEM_EN | HP100_RESET_LB, OPTION_LSW);
  523. hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
  524. hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
  525. printk("hp100: %s: IO mapped mode forced.n", dev->name);
  526. } else if (local_mode == 2) {
  527. hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
  528. hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
  529. hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
  530. printk("hp100: %s: Shared memory mode requested.n", dev->name);
  531. } else if (local_mode == 4) {
  532. if (chip == HP100_CHIPID_LASSEN) {
  533. hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_SET_HB, OPTION_LSW);
  534. hp100_outw(HP100_IO_EN | HP100_MEM_EN | HP100_RESET_LB, OPTION_LSW);
  535. printk("hp100: %s: Busmaster mode requested.n", dev->name);
  536. }
  537. local_mode = 1;
  538. }
  539. if (local_mode == 1) { /* default behaviour */
  540. lsw = hp100_inw(OPTION_LSW);
  541. if ((lsw & HP100_IO_EN) && (~lsw & HP100_MEM_EN) &&
  542.     (~lsw & (HP100_BM_WRITE | HP100_BM_READ))) {
  543. #ifdef HP100_DEBUG
  544. printk("hp100: %s: IO_EN bit is set on card.n", dev->name);
  545. #endif
  546. local_mode = 3;
  547. } else if (chip == HP100_CHIPID_LASSEN &&
  548.    (lsw & (HP100_BM_WRITE | HP100_BM_READ)) == (HP100_BM_WRITE | HP100_BM_READ)) {
  549. printk("hp100: %s: Busmaster mode enabled.n", dev->name);
  550. hp100_outw(HP100_MEM_EN | HP100_IO_EN | HP100_RESET_LB, OPTION_LSW);
  551. } else {
  552. #ifdef HP100_DEBUG
  553. printk("hp100: %s: Card not configured for BM or BM not supported with this card.n", dev->name);
  554. printk("hp100: %s: Trying shared memory mode.n", dev->name);
  555. #endif
  556. /* In this case, try shared memory mode */
  557. local_mode = 2;
  558. hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
  559. /* hp100_outw(HP100_IO_EN|HP100_RESET_LB, OPTION_LSW); */
  560. }
  561. }
  562. #ifdef HP100_DEBUG
  563. printk("hp100: %s: new LSW = 0x%xn", dev->name, hp100_inw(OPTION_LSW));
  564. #endif
  565. /* Check for shared memory on the card, eventually remap it */
  566. hp100_page(HW_MAP);
  567. mem_mapped = ((hp100_inw(OPTION_LSW) & (HP100_MEM_EN)) != 0);
  568. mem_ptr_phys = 0UL;
  569. mem_ptr_virt = NULL;
  570. memory_size = (8192 << ((hp100_inb(SRAM) >> 5) & 0x07));
  571. virt_memory_size = 0;
  572. /* For memory mapped or busmaster mode, we want the memory address */
  573. if (mem_mapped || (local_mode == 1)) {
  574. mem_ptr_phys = (hp100_inw(MEM_MAP_LSW) | (hp100_inw(MEM_MAP_MSW) << 16));
  575. mem_ptr_phys &= ~0x1fff; /* 8k alignment */
  576. if (bus == HP100_BUS_ISA && (mem_ptr_phys & ~0xfffff) != 0) {
  577. printk("hp100: %s: Can only use programmed i/o mode.n", dev->name);
  578. mem_ptr_phys = 0;
  579. mem_mapped = 0;
  580. local_mode = 3; /* Use programmed i/o */
  581. }
  582. /* We do not need access to shared memory in busmaster mode */
  583. /* However in slave mode we need to remap high (>1GB) card memory  */
  584. if (local_mode != 1) { /* = not busmaster */
  585. /* We try with smaller memory sizes, if ioremap fails */
  586. for (virt_memory_size = memory_size; virt_memory_size > 16383; virt_memory_size >>= 1) {
  587. if ((mem_ptr_virt = ioremap((u_long) mem_ptr_phys, virt_memory_size)) == NULL) {
  588. #ifdef HP100_DEBUG
  589. printk("hp100: %s: ioremap for 0x%x bytes high PCI memory at 0x%lx failedn", dev->name, virt_memory_size, mem_ptr_phys);
  590. #endif
  591. } else {
  592. #ifdef HP100_DEBUG
  593. printk("hp100: %s: remapped 0x%x bytes high PCI memory at 0x%lx to %p.n", dev->name, virt_memory_size, mem_ptr_phys, mem_ptr_virt);
  594. #endif
  595. break;
  596. }
  597. }
  598. if (mem_ptr_virt == NULL) { /* all ioremap tries failed */
  599. printk("hp100: %s: Failed to ioremap the PCI card memory. Will have to use i/o mapped mode.n", dev->name);
  600. local_mode = 3;
  601. virt_memory_size = 0;
  602. }
  603. }
  604. }
  605. if (local_mode == 3) { /* io mapped forced */
  606. mem_mapped = 0;
  607. mem_ptr_phys = 0;
  608. mem_ptr_virt = NULL;
  609. printk("hp100: %s: Using (slow) programmed i/o mode.n", dev->name);
  610. }
  611. /* Initialise the "private" data structure for this card. */
  612. if ((dev->priv = kmalloc(sizeof(struct hp100_private), GFP_KERNEL)) == NULL)
  613. return -ENOMEM;
  614. lp = (struct hp100_private *) dev->priv;
  615. memset(lp, 0, sizeof(struct hp100_private));
  616. spin_lock_init(&lp->lock);
  617. lp->id = eid;
  618. lp->chip = chip;
  619. lp->mode = local_mode;
  620. lp->bus = bus;
  621. lp->pci_dev = pci_dev;
  622. lp->priority_tx = hp100_priority_tx;
  623. lp->rx_ratio = hp100_rx_ratio;
  624. lp->mem_ptr_phys = mem_ptr_phys;
  625. lp->mem_ptr_virt = mem_ptr_virt;
  626. hp100_page(ID_MAC_ADDR);
  627. lp->soft_model = hp100_inb(SOFT_MODEL);
  628. lp->mac1_mode = HP100_MAC1MODE3;
  629. lp->mac2_mode = HP100_MAC2MODE3;
  630. memset(&lp->hash_bytes, 0x00, 8);
  631. dev->base_addr = ioaddr;
  632. lp->memory_size = memory_size;
  633. lp->virt_memory_size = virt_memory_size;
  634. lp->rx_ratio = hp100_rx_ratio; /* can be conf'd with insmod */
  635. /* memory region for programmed i/o */
  636. request_region(dev->base_addr, HP100_REGION_SIZE, eid->name);
  637. dev->open = hp100_open;
  638. dev->stop = hp100_close;
  639. if (lp->mode == 1) /* busmaster */
  640. dev->hard_start_xmit = hp100_start_xmit_bm;
  641. else
  642. dev->hard_start_xmit = hp100_start_xmit;
  643. dev->get_stats = hp100_get_stats;
  644. dev->set_multicast_list = &hp100_set_multicast_list;
  645. /* Ask the card for which IRQ line it is configured */
  646. if (bus == HP100_BUS_PCI) {
  647. dev->irq = pci_dev->irq;
  648. } else {
  649. hp100_page(HW_MAP);
  650. dev->irq = hp100_inb(IRQ_CHANNEL) & HP100_IRQMASK;
  651. if (dev->irq == 2)
  652. dev->irq = 9;
  653. }
  654. if (lp->mode == 1) /* busmaster */
  655. dev->dma = 4;
  656. /* Ask the card for its MAC address and store it for later use. */
  657. hp100_page(ID_MAC_ADDR);
  658. for (i = uc = 0; i < 6; i++)
  659. dev->dev_addr[i] = hp100_inb(LAN_ADDR + i);
  660. /* Reset statistics (counters) */
  661. hp100_clear_stats(lp, ioaddr);
  662. SET_MODULE_OWNER(dev);
  663. ether_setup(dev);
  664. /* If busmaster mode is wanted, a dma-capable memory area is needed for
  665.  * the rx and tx PDLs 
  666.  * PCI cards can access the whole PC memory. Therefore GFP_DMA is not
  667.  * needed for the allocation of the memory area. 
  668.  */
  669. /* TODO: We do not need this with old cards, where PDLs are stored
  670.  * in the cards shared memory area. But currently, busmaster has been
  671.  * implemented/tested only with the lassen chip anyway... */
  672. if (lp->mode == 1) { /* busmaster */
  673. /* Get physically continous memory for TX & RX PDLs    */
  674. if ((lp->page_vaddr = kmalloc(MAX_RINGSIZE + 0x0f, GFP_KERNEL)) == NULL)
  675. return -ENOMEM;
  676. lp->page_vaddr_algn = ((u_int *) (((u_int) (lp->page_vaddr) + 0x0f) & ~0x0f));
  677. memset(lp->page_vaddr, 0, MAX_RINGSIZE + 0x0f);
  678. #ifdef HP100_DEBUG_BM
  679. printk("hp100: %s: Reserved DMA memory from 0x%x to 0x%xn", dev->name, (u_int) lp->page_vaddr_algn, (u_int) lp->page_vaddr_algn + MAX_RINGSIZE);
  680. #endif
  681. lp->rxrcommit = lp->txrcommit = 0;
  682. lp->rxrhead = lp->rxrtail = &(lp->rxring[0]);
  683. lp->txrhead = lp->txrtail = &(lp->txring[0]);
  684. }
  685. /* Initialise the card. */
  686. /* (I'm not really sure if it's a good idea to do this during probing, but 
  687.  * like this it's assured that the lan connection type can be sensed
  688.  * correctly)
  689.  */
  690. hp100_hwinit(dev);
  691. /* Try to find out which kind of LAN the card is connected to. */
  692. lp->lan_type = hp100_sense_lan(dev);
  693. /* Print out a message what about what we think we have probed. */
  694. printk("hp100: %s: %s at 0x%x, IRQ %d, ", dev->name, lp->id->name, ioaddr, dev->irq);
  695. switch (bus) {
  696. case HP100_BUS_EISA:
  697. printk("EISA");
  698. break;
  699. case HP100_BUS_PCI:
  700. printk("PCI");
  701. break;
  702. default:
  703. printk("ISA");
  704. break;
  705. }
  706. printk(" bus, %dk SRAM (rx/tx %d%%).n", lp->memory_size >> 10, lp->rx_ratio);
  707. if (lp->mode == 2) { /* memory mapped */
  708. printk("hp100: %s: Memory area at 0x%lx-0x%lx", dev->name, mem_ptr_phys,
  709. (mem_ptr_phys + (mem_ptr_phys > 0x100000 ? (u_long) lp->memory_size : 16 * 1024)) - 1);
  710. if (mem_ptr_virt)
  711. printk(" (virtual base %p)", mem_ptr_virt);
  712. printk(".n");
  713. /* Set for info when doing ifconfig */
  714. dev->mem_start = mem_ptr_phys;
  715. dev->mem_end = mem_ptr_phys + lp->memory_size;
  716. }
  717. printk("hp100: %s: ", dev->name);
  718. if (lp->lan_type != HP100_LAN_ERR)
  719. printk("Adapter is attached to ");
  720. switch (lp->lan_type) {
  721. case HP100_LAN_100:
  722. printk("100Mb/s Voice Grade AnyLAN network.n");
  723. break;
  724. case HP100_LAN_10:
  725. printk("10Mb/s network.n");
  726. break;
  727. default:
  728. printk("Warning! Link down.n");
  729. }
  730. return 0;
  731. }
  732. /* This procedure puts the card into a stable init state */
  733. static void hp100_hwinit(struct net_device *dev)
  734. {
  735. int ioaddr = dev->base_addr;
  736. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  737. #ifdef HP100_DEBUG_B
  738. hp100_outw(0x4202, TRACE);
  739. printk("hp100: %s: hwinitn", dev->name);
  740. #endif
  741. /* Initialise the card. -------------------------------------------- */
  742. /* Clear all pending Ints and disable Ints */
  743. hp100_page(PERFORMANCE);
  744. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  745. hp100_outw(0xffff, IRQ_STATUS); /* clear all pending ints */
  746. hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
  747. hp100_outw(HP100_TRI_INT | HP100_SET_HB, OPTION_LSW);
  748. if (lp->mode == 1) {
  749. hp100_BM_shutdown(dev); /* disables BM, puts cascade in reset */
  750. wait();
  751. } else {
  752. hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
  753. hp100_cascade_reset(dev, TRUE);
  754. hp100_page(MAC_CTRL);
  755. hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);
  756. }
  757. /* Initiate EEPROM reload */
  758. hp100_load_eeprom(dev, 0);
  759. wait();
  760. /* Go into reset again. */
  761. hp100_cascade_reset(dev, TRUE);
  762. /* Set Option Registers to a safe state  */
  763. hp100_outw(HP100_DEBUG_EN |
  764.    HP100_RX_HDR |
  765.    HP100_EE_EN |
  766.    HP100_BM_WRITE |
  767.    HP100_BM_READ | HP100_RESET_HB |
  768.    HP100_FAKE_INT |
  769.    HP100_INT_EN |
  770.    HP100_MEM_EN |
  771.    HP100_IO_EN | HP100_RESET_LB, OPTION_LSW);
  772. hp100_outw(HP100_TRI_INT |
  773.    HP100_MMAP_DIS | HP100_SET_HB, OPTION_LSW);
  774. hp100_outb(HP100_PRIORITY_TX |
  775.    HP100_ADV_NXT_PKT |
  776.    HP100_TX_CMD | HP100_RESET_LB, OPTION_MSW);
  777. /* TODO: Configure MMU for Ram Test. */
  778. /* TODO: Ram Test. */
  779. /* Re-check if adapter is still at same i/o location      */
  780. /* (If the base i/o in eeprom has been changed but the    */
  781. /* registers had not been changed, a reload of the eeprom */
  782. /* would move the adapter to the address stored in eeprom */
  783. /* TODO: Code to implement. */
  784. /* Until here it was code from HWdiscover procedure. */
  785. /* Next comes code from mmuinit procedure of SCO BM driver which is
  786.  * called from HWconfigure in the SCO driver.  */
  787. /* Initialise MMU, eventually switch on Busmaster Mode, initialise 
  788.  * multicast filter...
  789.  */
  790. hp100_mmuinit(dev);
  791. /* We don't turn the interrupts on here - this is done by start_interface. */
  792. wait(); /* TODO: Do we really need this? */
  793. /* Enable Hardware (e.g. unreset) */
  794. hp100_cascade_reset(dev, FALSE);
  795. /* ------- initialisation complete ----------- */
  796. /* Finally try to log in the Hub if there may be a VG connection. */
  797. if (lp->lan_type != HP100_LAN_10)
  798. hp100_login_to_vg_hub(dev, FALSE); /* relogin */
  799. }
  800. /* 
  801.  * mmuinit - Reinitialise Cascade MMU and MAC settings.
  802.  * Note: Must already be in reset and leaves card in reset. 
  803.  */
  804. static void hp100_mmuinit(struct net_device *dev)
  805. {
  806. int ioaddr = dev->base_addr;
  807. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  808. int i;
  809. #ifdef HP100_DEBUG_B
  810. hp100_outw(0x4203, TRACE);
  811. printk("hp100: %s: mmuinitn", dev->name);
  812. #endif
  813. #ifdef HP100_DEBUG
  814. if (0 != (hp100_inw(OPTION_LSW) & HP100_HW_RST)) {
  815. printk("hp100: %s: Not in reset when entering mmuinit. Fix me.n", dev->name);
  816. return;
  817. }
  818. #endif
  819. /* Make sure IRQs are masked off and ack'ed. */
  820. hp100_page(PERFORMANCE);
  821. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  822. hp100_outw(0xffff, IRQ_STATUS); /* ack IRQ */
  823. /*
  824.  * Enable Hardware 
  825.  * - Clear Debug En, Rx Hdr Pipe, EE En, I/O En, Fake Int and Intr En
  826.  * - Set Tri-State Int, Bus Master Rd/Wr, and Mem Map Disable
  827.  * - Clear Priority, Advance Pkt and Xmit Cmd
  828.  */
  829. hp100_outw(HP100_DEBUG_EN |
  830.    HP100_RX_HDR |
  831.    HP100_EE_EN | HP100_RESET_HB |
  832.    HP100_IO_EN |
  833.    HP100_FAKE_INT |
  834.    HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
  835. hp100_outw(HP100_TRI_INT | HP100_SET_HB, OPTION_LSW);
  836. if (lp->mode == 1) { /* busmaster */
  837. hp100_outw(HP100_BM_WRITE |
  838.    HP100_BM_READ |
  839.    HP100_MMAP_DIS | HP100_SET_HB, OPTION_LSW);
  840. } else if (lp->mode == 2) { /* memory mapped */
  841. hp100_outw(HP100_BM_WRITE |
  842.    HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
  843. hp100_outw(HP100_MMAP_DIS | HP100_RESET_HB, OPTION_LSW);
  844. hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
  845. hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
  846. } else if (lp->mode == 3) { /* i/o mapped mode */
  847. hp100_outw(HP100_MMAP_DIS | HP100_SET_HB |
  848.    HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
  849. }
  850. hp100_page(HW_MAP);
  851. hp100_outb(0, EARLYRXCFG);
  852. hp100_outw(0, EARLYTXCFG);
  853. /*
  854.  * Enable Bus Master mode
  855.  */
  856. if (lp->mode == 1) { /* busmaster */
  857. /* Experimental: Set some PCI configuration bits */
  858. hp100_page(HW_MAP);
  859. hp100_andb(~HP100_PDL_USE3, MODECTRL1); /* BM engine read maximum */
  860. hp100_andb(~HP100_TX_DUALQ, MODECTRL1); /* No Queue for Priority TX */
  861. /* PCI Bus failures should result in a Misc. Interrupt */
  862. hp100_orb(HP100_EN_BUS_FAIL, MODECTRL2);
  863. hp100_outw(HP100_BM_READ | HP100_BM_WRITE | HP100_SET_HB, OPTION_LSW);
  864. hp100_page(HW_MAP);
  865. /* Use Burst Mode and switch on PAGE_CK */
  866. hp100_orb(HP100_BM_BURST_RD | HP100_BM_BURST_WR, BM);
  867. if ((lp->chip == HP100_CHIPID_RAINIER) || (lp->chip == HP100_CHIPID_SHASTA))
  868. hp100_orb(HP100_BM_PAGE_CK, BM);
  869. hp100_orb(HP100_BM_MASTER, BM);
  870. } else { /* not busmaster */
  871. hp100_page(HW_MAP);
  872. hp100_andb(~HP100_BM_MASTER, BM);
  873. }
  874. /*
  875.  * Divide card memory into regions for Rx, Tx and, if non-ETR chip, PDLs
  876.  */
  877. hp100_page(MMU_CFG);
  878. if (lp->mode == 1) { /* only needed for Busmaster */
  879. int xmit_stop, recv_stop;
  880. if ((lp->chip == HP100_CHIPID_RAINIER)
  881.     || (lp->chip == HP100_CHIPID_SHASTA)) {
  882. int pdl_stop;
  883. /*
  884.  * Each pdl is 508 bytes long. (63 frags * 4 bytes for address and
  885.  * 4 bytes for header). We will leave NUM_RXPDLS * 508 (rounded
  886.  * to the next higher 1k boundary) bytes for the rx-pdl's
  887.  * Note: For non-etr chips the transmit stop register must be
  888.  * programmed on a 1k boundary, i.e. bits 9:0 must be zero. 
  889.  */
  890. pdl_stop = lp->memory_size;
  891. xmit_stop = (pdl_stop - 508 * (MAX_RX_PDL) - 16) & ~(0x03ff);
  892. recv_stop = (xmit_stop * (lp->rx_ratio) / 100) & ~(0x03ff);
  893. hp100_outw((pdl_stop >> 4) - 1, PDL_MEM_STOP);
  894. #ifdef HP100_DEBUG_BM
  895. printk("hp100: %s: PDL_STOP = 0x%xn", dev->name, pdl_stop);
  896. #endif
  897. } else {
  898. /* ETR chip (Lassen) in busmaster mode */
  899. xmit_stop = (lp->memory_size) - 1;
  900. recv_stop = ((lp->memory_size * lp->rx_ratio) / 100) & ~(0x03ff);
  901. }
  902. hp100_outw(xmit_stop >> 4, TX_MEM_STOP);
  903. hp100_outw(recv_stop >> 4, RX_MEM_STOP);
  904. #ifdef HP100_DEBUG_BM
  905. printk("hp100: %s: TX_STOP  = 0x%xn", dev->name, xmit_stop >> 4);
  906. printk("hp100: %s: RX_STOP  = 0x%xn", dev->name, recv_stop >> 4);
  907. #endif
  908. } else {
  909. /* Slave modes (memory mapped and programmed io)  */
  910. hp100_outw((((lp->memory_size * lp->rx_ratio) / 100) >> 4), RX_MEM_STOP);
  911. hp100_outw(((lp->memory_size - 1) >> 4), TX_MEM_STOP);
  912. #ifdef HP100_DEBUG
  913. printk("hp100: %s: TX_MEM_STOP: 0x%xn", dev->name, hp100_inw(TX_MEM_STOP));
  914. printk("hp100: %s: RX_MEM_STOP: 0x%xn", dev->name, hp100_inw(RX_MEM_STOP));
  915. #endif
  916. }
  917. /* Write MAC address into page 1 */
  918. hp100_page(MAC_ADDRESS);
  919. for (i = 0; i < 6; i++)
  920. hp100_outb(dev->dev_addr[i], MAC_ADDR + i);
  921. /* Zero the multicast hash registers */
  922. for (i = 0; i < 8; i++)
  923. hp100_outb(0x0, HASH_BYTE0 + i);
  924. /* Set up MAC defaults */
  925. hp100_page(MAC_CTRL);
  926. /* Go to LAN Page and zero all filter bits */
  927. /* Zero accept error, accept multicast, accept broadcast and accept */
  928. /* all directed packet bits */
  929. hp100_andb(~(HP100_RX_EN |
  930.      HP100_TX_EN |
  931.      HP100_ACC_ERRORED |
  932.      HP100_ACC_MC |
  933.      HP100_ACC_BC | HP100_ACC_PHY), MAC_CFG_1);
  934. hp100_outb(0x00, MAC_CFG_2);
  935. /* Zero the frame format bit. This works around a training bug in the */
  936. /* new hubs. */
  937. hp100_outb(0x00, VG_LAN_CFG_2); /* (use 802.3) */
  938. if (lp->priority_tx)
  939. hp100_outb(HP100_PRIORITY_TX | HP100_SET_LB, OPTION_MSW);
  940. else
  941. hp100_outb(HP100_PRIORITY_TX | HP100_RESET_LB, OPTION_MSW);
  942. hp100_outb(HP100_ADV_NXT_PKT |
  943.    HP100_TX_CMD | HP100_RESET_LB, OPTION_MSW);
  944. /* If busmaster, initialize the PDLs */
  945. if (lp->mode == 1)
  946. hp100_init_pdls(dev);
  947. /* Go to performance page and initalize isr and imr registers */
  948. hp100_page(PERFORMANCE);
  949. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  950. hp100_outw(0xffff, IRQ_STATUS); /* ack IRQ */
  951. }
  952. /*
  953.  *  open/close functions
  954.  */
  955. static int hp100_open(struct net_device *dev)
  956. {
  957. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  958. #ifdef HP100_DEBUG_B
  959. int ioaddr = dev->base_addr;
  960. #endif
  961. #ifdef HP100_DEBUG_B
  962. hp100_outw(0x4204, TRACE);
  963. printk("hp100: %s: openn", dev->name);
  964. #endif
  965. /* New: if bus is PCI or EISA, interrupts might be shared interrupts */
  966. if (request_irq(dev->irq, hp100_interrupt,
  967. lp->bus == HP100_BUS_PCI || lp->bus ==
  968. HP100_BUS_EISA ? SA_SHIRQ : SA_INTERRUPT,
  969. lp->id->name, dev)) {
  970. printk("hp100: %s: unable to get IRQ %dn", dev->name, dev->irq);
  971. return -EAGAIN;
  972. }
  973. dev->trans_start = jiffies;
  974. netif_start_queue(dev);
  975. lp->lan_type = hp100_sense_lan(dev);
  976. lp->mac1_mode = HP100_MAC1MODE3;
  977. lp->mac2_mode = HP100_MAC2MODE3;
  978. memset(&lp->hash_bytes, 0x00, 8);
  979. hp100_stop_interface(dev);
  980. hp100_hwinit(dev);
  981. hp100_start_interface(dev); /* sets mac modes, enables interrupts */
  982. return 0;
  983. }
  984. /* The close function is called when the interface is to be brought down */
  985. static int hp100_close(struct net_device *dev)
  986. {
  987. int ioaddr = dev->base_addr;
  988. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  989. #ifdef HP100_DEBUG_B
  990. hp100_outw(0x4205, TRACE);
  991. printk("hp100: %s: closen", dev->name);
  992. #endif
  993. hp100_page(PERFORMANCE);
  994. hp100_outw(0xfefe, IRQ_MASK); /* mask off all IRQs */
  995. hp100_stop_interface(dev);
  996. if (lp->lan_type == HP100_LAN_100)
  997. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  998. netif_stop_queue(dev);
  999. free_irq(dev->irq, dev);
  1000. #ifdef HP100_DEBUG
  1001. printk("hp100: %s: close LSW = 0x%xn", dev->name,
  1002.        hp100_inw(OPTION_LSW));
  1003. #endif
  1004. return 0;
  1005. }
  1006. /*
  1007.  * Configure the PDL Rx rings and LAN 
  1008.  */
  1009. static void hp100_init_pdls(struct net_device *dev)
  1010. {
  1011. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1012. hp100_ring_t *ringptr;
  1013. u_int *pageptr;
  1014. int i;
  1015. #ifdef HP100_DEBUG_B
  1016. int ioaddr = dev->base_addr;
  1017. #endif
  1018. #ifdef HP100_DEBUG_B
  1019. hp100_outw(0x4206, TRACE);
  1020. printk("hp100: %s: init pdlsn", dev->name);
  1021. #endif
  1022. if (0 == lp->page_vaddr_algn)
  1023. printk("hp100: %s: Warning: lp->page_vaddr_algn not initialised!n", dev->name);
  1024. else {
  1025. /* pageptr shall point into the DMA accessible memory region  */
  1026. /* we use this pointer to status the upper limit of allocated */
  1027. /* memory in the allocated page. */
  1028. /* note: align the pointers to the pci cache line size */
  1029. memset(lp->page_vaddr_algn, 0, MAX_RINGSIZE); /* Zero  Rx/Tx ring page */
  1030. pageptr = lp->page_vaddr_algn;
  1031. lp->rxrcommit = 0;
  1032. ringptr = lp->rxrhead = lp->rxrtail = &(lp->rxring[0]);
  1033. /* Initialise Rx Ring */
  1034. for (i = MAX_RX_PDL - 1; i >= 0; i--) {
  1035. lp->rxring[i].next = ringptr;
  1036. ringptr = &(lp->rxring[i]);
  1037. pageptr += hp100_init_rxpdl(dev, ringptr, pageptr);
  1038. }
  1039. /* Initialise Tx Ring */
  1040. lp->txrcommit = 0;
  1041. ringptr = lp->txrhead = lp->txrtail = &(lp->txring[0]);
  1042. for (i = MAX_TX_PDL - 1; i >= 0; i--) {
  1043. lp->txring[i].next = ringptr;
  1044. ringptr = &(lp->txring[i]);
  1045. pageptr += hp100_init_txpdl(dev, ringptr, pageptr);
  1046. }
  1047. }
  1048. }
  1049. /* These functions "format" the entries in the pdl structure   */
  1050. /* They return how much memory the fragments need.            */
  1051. static int hp100_init_rxpdl(struct net_device *dev,
  1052.     register hp100_ring_t * ringptr,
  1053.     register u32 * pdlptr)
  1054. {
  1055. /* pdlptr is starting address for this pdl */
  1056. if (0 != (((unsigned) pdlptr) & 0xf))
  1057. printk("hp100: %s: Init rxpdl: Unaligned pdlptr 0x%x.n",
  1058.        dev->name, (unsigned) pdlptr);
  1059. ringptr->pdl = pdlptr + 1;
  1060. ringptr->pdl_paddr = virt_to_bus(pdlptr + 1);
  1061. ringptr->skb = (void *) NULL;
  1062. /* 
  1063.  * Write address and length of first PDL Fragment (which is used for
  1064.  * storing the RX-Header
  1065.  * We use the 4 bytes _before_ the PDH in the pdl memory area to 
  1066.  * store this information. (PDH is at offset 0x04)
  1067.  */
  1068. /* Note that pdlptr+1 and not pdlptr is the pointer to the PDH */
  1069. *(pdlptr + 2) = (u_int) virt_to_bus(pdlptr); /* Address Frag 1 */
  1070. *(pdlptr + 3) = 4; /* Length  Frag 1 */
  1071. return ((((MAX_RX_FRAG * 2 + 2) + 3) / 4) * 4);
  1072. }
  1073. static int hp100_init_txpdl(struct net_device *dev,
  1074.     register hp100_ring_t * ringptr,
  1075.     register u32 * pdlptr)
  1076. {
  1077. if (0 != (((unsigned) pdlptr) & 0xf))
  1078. printk("hp100: %s: Init txpdl: Unaligned pdlptr 0x%x.n", dev->name, (unsigned) pdlptr);
  1079. ringptr->pdl = pdlptr; /* +1; */
  1080. ringptr->pdl_paddr = virt_to_bus(pdlptr); /* +1 */
  1081. ringptr->skb = (void *) NULL;
  1082. return ((((MAX_TX_FRAG * 2 + 2) + 3) / 4) * 4);
  1083. }
  1084. /*
  1085.  * hp100_build_rx_pdl allocates an skb_buff of maximum size plus two bytes 
  1086.  * for possible odd word alignment rounding up to next dword and set PDL
  1087.  * address for fragment#2 
  1088.  * Returns: 0 if unable to allocate skb_buff
  1089.  *          1 if successful
  1090.  */
  1091. static int hp100_build_rx_pdl(hp100_ring_t * ringptr,
  1092.       struct net_device *dev)
  1093. {
  1094. #ifdef HP100_DEBUG_B
  1095. int ioaddr = dev->base_addr;
  1096. #endif
  1097. #ifdef HP100_DEBUG_BM
  1098. u_int *p;
  1099. #endif
  1100. #ifdef HP100_DEBUG_B
  1101. hp100_outw(0x4207, TRACE);
  1102. printk("hp100: %s: build rx pdln", dev->name);
  1103. #endif
  1104. /* Allocate skb buffer of maximum size */
  1105. /* Note: This depends on the alloc_skb functions allocating more 
  1106.  * space than requested, i.e. aligning to 16bytes */
  1107. ringptr->skb = dev_alloc_skb(((MAX_ETHER_SIZE + 2 + 3) / 4) * 4);
  1108. if (NULL != ringptr->skb) {
  1109. /* 
  1110.  * Reserve 2 bytes at the head of the buffer to land the IP header
  1111.  * on a long word boundary (According to the Network Driver section
  1112.  * in the Linux KHG, this should help to increase performance.)
  1113.  */
  1114. skb_reserve(ringptr->skb, 2);
  1115. ringptr->skb->dev = dev;
  1116. ringptr->skb->data = (u_char *) skb_put(ringptr->skb, MAX_ETHER_SIZE);
  1117. /* ringptr->pdl points to the beginning of the PDL, i.e. the PDH */
  1118. /* Note: 1st Fragment is used for the 4 byte packet status
  1119.  * (receive header). Its PDL entries are set up by init_rxpdl. So 
  1120.  * here we only have to set up the PDL fragment entries for the data
  1121.  * part. Those 4 bytes will be stored in the DMA memory region 
  1122.  * directly before the PDL. 
  1123.  */
  1124. #ifdef HP100_DEBUG_BM
  1125. printk("hp100: %s: build_rx_pdl: PDH@0x%x, skb->data (len %d) at 0x%xn",
  1126.      dev->name, (u_int) ringptr->pdl,
  1127.      ((MAX_ETHER_SIZE + 2 + 3) / 4) * 4,
  1128.      (unsigned int) ringptr->skb->data);
  1129. #endif
  1130. ringptr->pdl[0] = 0x00020000; /* Write PDH */
  1131. ringptr->pdl[3] = ((u_int) virt_to_bus(ringptr->skb->data));
  1132. ringptr->pdl[4] = MAX_ETHER_SIZE; /* Length of Data */
  1133. #ifdef HP100_DEBUG_BM
  1134. for (p = (ringptr->pdl); p < (ringptr->pdl + 5); p++)
  1135. printk("hp100: %s: Adr 0x%.8x = 0x%.8xn", dev->name, (u_int) p, (u_int) * p);
  1136. #endif
  1137. return (1);
  1138. }
  1139. /* else: */
  1140. /* alloc_skb failed (no memory) -> still can receive the header
  1141.  * fragment into PDL memory. make PDL safe by clearing msgptr and
  1142.  * making the PDL only 1 fragment (i.e. the 4 byte packet status)
  1143.  */
  1144. #ifdef HP100_DEBUG_BM
  1145. printk("hp100: %s: build_rx_pdl: PDH@0x%x, No space for skb.n", dev->name, (u_int) ringptr->pdl);
  1146. #endif
  1147. ringptr->pdl[0] = 0x00010000; /* PDH: Count=1 Fragment */
  1148. return (0);
  1149. }
  1150. /*
  1151.  *  hp100_rxfill - attempt to fill the Rx Ring will empty skb's
  1152.  *
  1153.  * Makes assumption that skb's are always contiguous memory areas and
  1154.  * therefore PDLs contain only 2 physical fragments.
  1155.  * -  While the number of Rx PDLs with buffers is less than maximum
  1156.  *      a.  Get a maximum packet size skb
  1157.  *      b.  Put the physical address of the buffer into the PDL.
  1158.  *      c.  Output physical address of PDL to adapter.
  1159.  */
  1160. static void hp100_rxfill(struct net_device *dev)
  1161. {
  1162. int ioaddr = dev->base_addr;
  1163. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1164. hp100_ring_t *ringptr;
  1165. #ifdef HP100_DEBUG_B
  1166. hp100_outw(0x4208, TRACE);
  1167. printk("hp100: %s: rxfilln", dev->name);
  1168. #endif
  1169. hp100_page(PERFORMANCE);
  1170. while (lp->rxrcommit < MAX_RX_PDL) {
  1171. /*
  1172.    ** Attempt to get a buffer and build a Rx PDL.
  1173.  */
  1174. ringptr = lp->rxrtail;
  1175. if (0 == hp100_build_rx_pdl(ringptr, dev)) {
  1176. return; /* None available, return */
  1177. }
  1178. /* Hand this PDL over to the card */
  1179. /* Note: This needs performance page selected! */
  1180. #ifdef HP100_DEBUG_BM
  1181. printk("hp100: %s: rxfill: Hand to card: pdl #%d @0x%x phys:0x%x, buffer: 0x%xn",
  1182.      dev->name, lp->rxrcommit, (u_int) ringptr->pdl,
  1183.      (u_int) ringptr->pdl_paddr, (u_int) ringptr->pdl[3]);
  1184. #endif
  1185. hp100_outl((u32) ringptr->pdl_paddr, RX_PDA);
  1186. lp->rxrcommit += 1;
  1187. lp->rxrtail = ringptr->next;
  1188. }
  1189. }
  1190. /*
  1191.  * BM_shutdown - shutdown bus mastering and leave chip in reset state
  1192.  */
  1193. static void hp100_BM_shutdown(struct net_device *dev)
  1194. {
  1195. int ioaddr = dev->base_addr;
  1196. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1197. unsigned long time;
  1198. #ifdef HP100_DEBUG_B
  1199. hp100_outw(0x4209, TRACE);
  1200. printk("hp100: %s: bm shutdownn", dev->name);
  1201. #endif
  1202. hp100_page(PERFORMANCE);
  1203. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  1204. hp100_outw(0xffff, IRQ_STATUS); /* Ack all ints */
  1205. /* Ensure Interrupts are off */
  1206. hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
  1207. /* Disable all MAC activity */
  1208. hp100_page(MAC_CTRL);
  1209. hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1); /* stop rx/tx */
  1210. /* If cascade MMU is not already in reset */
  1211. if (0 != (hp100_inw(OPTION_LSW) & HP100_HW_RST)) {
  1212. /* Wait 1.3ms (10Mb max packet time) to ensure MAC is idle so
  1213.  * MMU pointers will not be reset out from underneath
  1214.  */
  1215. hp100_page(MAC_CTRL);
  1216. for (time = 0; time < 5000; time++) {
  1217. if ((hp100_inb(MAC_CFG_1) & (HP100_TX_IDLE | HP100_RX_IDLE)) == (HP100_TX_IDLE | HP100_RX_IDLE))
  1218. break;
  1219. }
  1220. /* Shutdown algorithm depends on the generation of Cascade */
  1221. if (lp->chip == HP100_CHIPID_LASSEN) { /* ETR shutdown/reset */
  1222. /* Disable Busmaster mode and wait for bit to go to zero. */
  1223. hp100_page(HW_MAP);
  1224. hp100_andb(~HP100_BM_MASTER, BM);
  1225. /* 100 ms timeout */
  1226. for (time = 0; time < 32000; time++) {
  1227. if (0 == (hp100_inb(BM) & HP100_BM_MASTER))
  1228. break;
  1229. }
  1230. } else { /* Shasta or Rainier Shutdown/Reset */
  1231. /* To ensure all bus master inloading activity has ceased,
  1232.  * wait for no Rx PDAs or no Rx packets on card. 
  1233.  */
  1234. hp100_page(PERFORMANCE);
  1235. /* 100 ms timeout */
  1236. for (time = 0; time < 10000; time++) {
  1237. /* RX_PDL: PDLs not executed. */
  1238. /* RX_PKT_CNT: RX'd packets on card. */
  1239. if ((hp100_inb(RX_PDL) == 0) && (hp100_inb(RX_PKT_CNT) == 0))
  1240. break;
  1241. }
  1242. if (time >= 10000)
  1243. printk("hp100: %s: BM shutdown error.n", dev->name);
  1244. /* To ensure all bus master outloading activity has ceased,
  1245.  * wait until the Tx PDA count goes to zero or no more Tx space
  1246.  * available in the Tx region of the card. 
  1247.  */
  1248. /* 100 ms timeout */
  1249. for (time = 0; time < 10000; time++) {
  1250. if ((0 == hp100_inb(TX_PKT_CNT)) &&
  1251.     (0 != (hp100_inb(TX_MEM_FREE) & HP100_AUTO_COMPARE)))
  1252. break;
  1253. }
  1254. /* Disable Busmaster mode */
  1255. hp100_page(HW_MAP);
  1256. hp100_andb(~HP100_BM_MASTER, BM);
  1257. } /* end of shutdown procedure for non-etr parts */
  1258. hp100_cascade_reset(dev, TRUE);
  1259. }
  1260. hp100_page(PERFORMANCE);
  1261. /* hp100_outw( HP100_BM_READ | HP100_BM_WRITE | HP100_RESET_HB, OPTION_LSW ); */
  1262. /* Busmaster mode should be shut down now. */
  1263. }
  1264. /* 
  1265.  *  transmit functions
  1266.  */
  1267. /* tx function for busmaster mode */
  1268. static int hp100_start_xmit_bm(struct sk_buff *skb, struct net_device *dev)
  1269. {
  1270. unsigned long flags;
  1271. int i, ok_flag;
  1272. int ioaddr = dev->base_addr;
  1273. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1274. hp100_ring_t *ringptr;
  1275. #ifdef HP100_DEBUG_B
  1276. hp100_outw(0x4210, TRACE);
  1277. printk("hp100: %s: start_xmit_bmn", dev->name);
  1278. #endif
  1279. if (skb == NULL) {
  1280. return 0;
  1281. }
  1282. if (skb->len <= 0)
  1283. return 0;
  1284. /* Get Tx ring tail pointer */
  1285. if (lp->txrtail->next == lp->txrhead) {
  1286. /* No memory. */
  1287. #ifdef HP100_DEBUG
  1288. printk("hp100: %s: start_xmit_bm: No TX PDL available.n", dev->name);
  1289. #endif
  1290. /* not waited long enough since last tx? */
  1291. if (jiffies - dev->trans_start < HZ)
  1292. return -EAGAIN;
  1293. if (lp->lan_type < 0) { /* no LAN type detected yet? */
  1294. hp100_stop_interface(dev);
  1295. if ((lp->lan_type = hp100_sense_lan(dev)) < 0) {
  1296. printk("hp100: %s: no connection found - check wiren", dev->name);
  1297. hp100_start_interface(dev); /* 10Mb/s RX pkts maybe handled */
  1298. return -EIO;
  1299. }
  1300. if (lp->lan_type == HP100_LAN_100)
  1301. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE); /* relogin */
  1302. hp100_start_interface(dev);
  1303. }
  1304. if (lp->lan_type == HP100_LAN_100 && lp->hub_status < 0) {
  1305. /* we have a 100Mb/s adapter but it isn't connected to hub */
  1306. printk("hp100: %s: login to 100Mb/s hub retryn", dev->name);
  1307. hp100_stop_interface(dev);
  1308. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1309. hp100_start_interface(dev);
  1310. } else {
  1311. spin_lock_irqsave(&lp->lock, flags);
  1312. hp100_ints_off(); /* Useful ? Jean II */
  1313. i = hp100_sense_lan(dev);
  1314. hp100_ints_on();
  1315. spin_unlock_irqrestore(&lp->lock, flags);
  1316. if (i == HP100_LAN_ERR)
  1317. printk("hp100: %s: link down detectedn", dev->name);
  1318. else if (lp->lan_type != i) { /* cable change! */
  1319. /* it's very hard - all network setting must be changed!!! */
  1320. printk("hp100: %s: cable change 10Mb/s <-> 100Mb/s detectedn", dev->name);
  1321. lp->lan_type = i;
  1322. hp100_stop_interface(dev);
  1323. if (lp->lan_type == HP100_LAN_100)
  1324. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1325. hp100_start_interface(dev);
  1326. } else {
  1327. printk("hp100: %s: interface resetn", dev->name);
  1328. hp100_stop_interface(dev);
  1329. if (lp->lan_type == HP100_LAN_100)
  1330. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1331. hp100_start_interface(dev);
  1332. }
  1333. }
  1334. dev->trans_start = jiffies;
  1335. return -EAGAIN;
  1336. }
  1337. /*
  1338.  * we have to turn int's off before modifying this, otherwise
  1339.  * a tx_pdl_cleanup could occur at the same time
  1340.  */
  1341. spin_lock_irqsave(&lp->lock, flags);
  1342. ringptr = lp->txrtail;
  1343. lp->txrtail = ringptr->next;
  1344. /* Check whether packet has minimal packet size */
  1345. ok_flag = skb->len >= HP100_MIN_PACKET_SIZE;
  1346. i = ok_flag ? skb->len : HP100_MIN_PACKET_SIZE;
  1347. ringptr->skb = skb;
  1348. ringptr->pdl[0] = ((1 << 16) | i); /* PDH: 1 Fragment & length */
  1349. ringptr->pdl[1] = (u32) virt_to_bus(skb->data); /* 1st Frag: Adr. of data */
  1350. if (lp->chip == HP100_CHIPID_SHASTA) {
  1351. /* TODO:Could someone who has the EISA card please check if this works? */
  1352. ringptr->pdl[2] = i;
  1353. } else { /* Lassen */
  1354. /* In the PDL, don't use the padded size but the real packet size: */
  1355. ringptr->pdl[2] = skb->len; /* 1st Frag: Length of frag */
  1356. }
  1357. /* Hand this PDL to the card. */
  1358. hp100_outl(ringptr->pdl_paddr, TX_PDA_L); /* Low Prio. Queue */
  1359. lp->txrcommit++;
  1360. spin_unlock_irqrestore(&lp->lock, flags);
  1361. /* Update statistics */
  1362. lp->stats.tx_packets++;
  1363. lp->stats.tx_bytes += skb->len;
  1364. dev->trans_start = jiffies;
  1365. return 0;
  1366. }
  1367. /* clean_txring checks if packets have been sent by the card by reading
  1368.  * the TX_PDL register from the performance page and comparing it to the
  1369.  * number of commited packets. It then frees the skb's of the packets that
  1370.  * obviously have been sent to the network.
  1371.  *
  1372.  * Needs the PERFORMANCE page selected. 
  1373.  */
  1374. static void hp100_clean_txring(struct net_device *dev)
  1375. {
  1376. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1377. int ioaddr = dev->base_addr;
  1378. int donecount;
  1379. #ifdef HP100_DEBUG_B
  1380. hp100_outw(0x4211, TRACE);
  1381. printk("hp100: %s: clean txringn", dev->name);
  1382. #endif
  1383. /* How many PDLs have been transmitted? */
  1384. donecount = (lp->txrcommit) - hp100_inb(TX_PDL);
  1385. #ifdef HP100_DEBUG
  1386. if (donecount > MAX_TX_PDL)
  1387. printk("hp100: %s: Warning: More PDLs transmitted than commited to card???n", dev->name);
  1388. #endif
  1389. for (; 0 != donecount; donecount--) {
  1390. #ifdef HP100_DEBUG_BM
  1391. printk("hp100: %s: Free skb: data @0x%.8x txrcommit=0x%x TXPDL=0x%x, done=0x%xn",
  1392. dev->name, (u_int) lp->txrhead->skb->data,
  1393. lp->txrcommit, hp100_inb(TX_PDL), donecount);
  1394. #endif
  1395. dev_kfree_skb_any(lp->txrhead->skb);
  1396. lp->txrhead->skb = (void *) NULL;
  1397. lp->txrhead = lp->txrhead->next;
  1398. lp->txrcommit--;
  1399. }
  1400. }
  1401. /* tx function for slave modes */
  1402. static int hp100_start_xmit(struct sk_buff *skb, struct net_device *dev)
  1403. {
  1404. unsigned long flags;
  1405. int i, ok_flag;
  1406. int ioaddr = dev->base_addr;
  1407. u_short val;
  1408. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1409. #ifdef HP100_DEBUG_B
  1410. hp100_outw(0x4212, TRACE);
  1411. printk("hp100: %s: start_xmitn", dev->name);
  1412. #endif
  1413. if (skb == NULL) {
  1414. return 0;
  1415. }
  1416. if (skb->len <= 0)
  1417. return 0;
  1418. if (lp->lan_type < 0) { /* no LAN type detected yet? */
  1419. hp100_stop_interface(dev);
  1420. if ((lp->lan_type = hp100_sense_lan(dev)) < 0) {
  1421. printk("hp100: %s: no connection found - check wiren", dev->name);
  1422. hp100_start_interface(dev); /* 10Mb/s RX packets maybe handled */
  1423. return -EIO;
  1424. }
  1425. if (lp->lan_type == HP100_LAN_100)
  1426. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE); /* relogin */
  1427. hp100_start_interface(dev);
  1428. }
  1429. /* If there is not enough free memory on the card... */
  1430. i = hp100_inl(TX_MEM_FREE) & 0x7fffffff;
  1431. if (!(((i / 2) - 539) > (skb->len + 16) && (hp100_inb(TX_PKT_CNT) < 255))) {
  1432. #ifdef HP100_DEBUG
  1433. printk("hp100: %s: start_xmit: tx free mem = 0x%xn", dev->name, i);
  1434. #endif
  1435. /* not waited long enough since last failed tx try? */
  1436. if (jiffies - dev->trans_start < HZ) {
  1437. #ifdef HP100_DEBUG
  1438. printk("hp100: %s: trans_start timing problemn",
  1439.        dev->name);
  1440. #endif
  1441. return -EAGAIN;
  1442. }
  1443. if (lp->lan_type == HP100_LAN_100 && lp->hub_status < 0) {
  1444. /* we have a 100Mb/s adapter but it isn't connected to hub */
  1445. printk("hp100: %s: login to 100Mb/s hub retryn", dev->name);
  1446. hp100_stop_interface(dev);
  1447. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1448. hp100_start_interface(dev);
  1449. } else {
  1450. spin_lock_irqsave(&lp->lock, flags);
  1451. hp100_ints_off(); /* Useful ? Jean II */
  1452. i = hp100_sense_lan(dev);
  1453. hp100_ints_on();
  1454. spin_unlock_irqrestore(&lp->lock, flags);
  1455. if (i == HP100_LAN_ERR)
  1456. printk("hp100: %s: link down detectedn", dev->name);
  1457. else if (lp->lan_type != i) { /* cable change! */
  1458. /* it's very hard - all network setting must be changed!!! */
  1459. printk("hp100: %s: cable change 10Mb/s <-> 100Mb/s detectedn", dev->name);
  1460. lp->lan_type = i;
  1461. hp100_stop_interface(dev);
  1462. if (lp->lan_type == HP100_LAN_100)
  1463. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1464. hp100_start_interface(dev);
  1465. } else {
  1466. printk("hp100: %s: interface resetn", dev->name);
  1467. hp100_stop_interface(dev);
  1468. if (lp->lan_type == HP100_LAN_100)
  1469. lp->hub_status = hp100_login_to_vg_hub(dev, FALSE);
  1470. hp100_start_interface(dev);
  1471. mdelay(1);
  1472. }
  1473. }
  1474. dev->trans_start = jiffies;
  1475. return -EAGAIN;
  1476. }
  1477. for (i = 0; i < 6000 && (hp100_inb(OPTION_MSW) & HP100_TX_CMD); i++) {
  1478. #ifdef HP100_DEBUG_TX
  1479. printk("hp100: %s: start_xmit: busyn", dev->name);
  1480. #endif
  1481. }
  1482. spin_lock_irqsave(&lp->lock, flags);
  1483. hp100_ints_off();
  1484. val = hp100_inw(IRQ_STATUS);
  1485. /* Ack / clear the interrupt TX_COMPLETE interrupt - this interrupt is set
  1486.  * when the current packet being transmitted on the wire is completed. */
  1487. hp100_outw(HP100_TX_COMPLETE, IRQ_STATUS);
  1488. #ifdef HP100_DEBUG_TX
  1489. printk("hp100: %s: start_xmit: irq_status=0x%.4x, irqmask=0x%.4x, len=%dn",
  1490. dev->name, val, hp100_inw(IRQ_MASK), (int) skb->len);
  1491. #endif
  1492. ok_flag = skb->len >= HP100_MIN_PACKET_SIZE;
  1493. i = ok_flag ? skb->len : HP100_MIN_PACKET_SIZE;
  1494. hp100_outw(i, DATA32); /* tell card the total packet length */
  1495. hp100_outw(i, FRAGMENT_LEN); /* and first/only fragment length    */
  1496. if (lp->mode == 2) { /* memory mapped */
  1497. if (lp->mem_ptr_virt) { /* high pci memory was remapped */
  1498. /* Note: The J2585B needs alignment to 32bits here!  */
  1499. memcpy_toio(lp->mem_ptr_virt, skb->data, (skb->len + 3) & ~3);
  1500. if (!ok_flag)
  1501. memset_io(lp->mem_ptr_virt, 0, HP100_MIN_PACKET_SIZE - skb->len);
  1502. } else {
  1503. /* Note: The J2585B needs alignment to 32bits here!  */
  1504. isa_memcpy_toio(lp->mem_ptr_phys, skb->data, (skb->len + 3) & ~3);
  1505. if (!ok_flag)
  1506. isa_memset_io(lp->mem_ptr_phys, 0, HP100_MIN_PACKET_SIZE - skb->len);
  1507. }
  1508. } else { /* programmed i/o */
  1509. outsl(ioaddr + HP100_REG_DATA32, skb->data,
  1510.       (skb->len + 3) >> 2);
  1511. if (!ok_flag)
  1512. for (i = (skb->len + 3) & ~3; i < HP100_MIN_PACKET_SIZE; i += 4)
  1513. hp100_outl(0, DATA32);
  1514. }
  1515. hp100_outb(HP100_TX_CMD | HP100_SET_LB, OPTION_MSW); /* send packet */
  1516. lp->stats.tx_packets++;
  1517. lp->stats.tx_bytes += skb->len;
  1518. dev->trans_start = jiffies;
  1519. hp100_ints_on();
  1520. spin_unlock_irqrestore(&lp->lock, flags);
  1521. dev_kfree_skb_any(skb);
  1522. #ifdef HP100_DEBUG_TX
  1523. printk("hp100: %s: start_xmit: endn", dev->name);
  1524. #endif
  1525. return 0;
  1526. }
  1527. /*
  1528.  * Receive Function (Non-Busmaster mode)
  1529.  * Called when an "Receive Packet" interrupt occurs, i.e. the receive 
  1530.  * packet counter is non-zero.
  1531.  * For non-busmaster, this function does the whole work of transfering
  1532.  * the packet to the host memory and then up to higher layers via skb
  1533.  * and netif_rx. 
  1534.  */
  1535. static void hp100_rx(struct net_device *dev)
  1536. {
  1537. int packets, pkt_len;
  1538. int ioaddr = dev->base_addr;
  1539. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1540. u_int header;
  1541. struct sk_buff *skb;
  1542. #ifdef DEBUG_B
  1543. hp100_outw(0x4213, TRACE);
  1544. printk("hp100: %s: rxn", dev->name);
  1545. #endif
  1546. /* First get indication of received lan packet */
  1547. /* RX_PKT_CND indicates the number of packets which have been fully */
  1548. /* received onto the card but have not been fully transferred of the card */
  1549. packets = hp100_inb(RX_PKT_CNT);
  1550. #ifdef HP100_DEBUG_RX
  1551. if (packets > 1)
  1552. printk("hp100: %s: rx: waiting packets = %dn", dev->name, packets);
  1553. #endif
  1554. while (packets-- > 0) {
  1555. /* If ADV_NXT_PKT is still set, we have to wait until the card has */
  1556. /* really advanced to the next packet. */
  1557. for (pkt_len = 0; pkt_len < 6000 && (hp100_inb(OPTION_MSW) & HP100_ADV_NXT_PKT); pkt_len++) {
  1558. #ifdef HP100_DEBUG_RX
  1559. printk ("hp100: %s: rx: busy, remaining packets = %dn", dev->name, packets);
  1560. #endif
  1561. }
  1562. /* First we get the header, which contains information about the */
  1563. /* actual length of the received packet. */
  1564. if (lp->mode == 2) { /* memory mapped mode */
  1565. if (lp->mem_ptr_virt) /* if memory was remapped */
  1566. header = readl(lp->mem_ptr_virt);
  1567. else
  1568. header = isa_readl(lp->mem_ptr_phys);
  1569. } else /* programmed i/o */
  1570. header = hp100_inl(DATA32);
  1571. pkt_len = ((header & HP100_PKT_LEN_MASK) + 3) & ~3;
  1572. #ifdef HP100_DEBUG_RX
  1573. printk("hp100: %s: rx: new packet - length=%d, errors=0x%x, dest=0x%xn",
  1574.      dev->name, header & HP100_PKT_LEN_MASK,
  1575.      (header >> 16) & 0xfff8, (header >> 16) & 7);
  1576. #endif
  1577. /* Now we allocate the skb and transfer the data into it. */
  1578. skb = dev_alloc_skb(pkt_len);
  1579. if (skb == NULL) { /* Not enough memory->drop packet */
  1580. #ifdef HP100_DEBUG
  1581. printk("hp100: %s: rx: couldn't allocate a sk_buff of size %dn",
  1582.      dev->name, pkt_len);
  1583. #endif
  1584. lp->stats.rx_dropped++;
  1585. } else { /* skb successfully allocated */
  1586. u_char *ptr;
  1587. skb->dev = dev;
  1588. /* ptr to start of the sk_buff data area */
  1589. ptr = (u_char *) skb_put(skb, pkt_len);
  1590. /* Now transfer the data from the card into that area */
  1591. if (lp->mode == 2) {
  1592. if (lp->mem_ptr_virt)
  1593. memcpy_fromio(ptr, lp->mem_ptr_virt,pkt_len);
  1594. /* Note alignment to 32bit transfers */
  1595. else
  1596. isa_memcpy_fromio(ptr, lp->mem_ptr_phys, pkt_len);
  1597. } else /* io mapped */
  1598. insl(ioaddr + HP100_REG_DATA32, ptr, pkt_len >> 2);
  1599. skb->protocol = eth_type_trans(skb, dev);
  1600. #ifdef HP100_DEBUG_RX
  1601. printk("hp100: %s: rx: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02xn",
  1602. dev->name, ptr[0], ptr[1], ptr[2], ptr[3],
  1603.   ptr[4], ptr[5], ptr[6], ptr[7], ptr[8],
  1604. ptr[9], ptr[10], ptr[11]);
  1605. #endif
  1606. netif_rx(skb);
  1607. dev->last_rx = jiffies;
  1608. lp->stats.rx_packets++;
  1609. lp->stats.rx_bytes += pkt_len;
  1610. }
  1611. /* Indicate the card that we have got the packet */
  1612. hp100_outb(HP100_ADV_NXT_PKT | HP100_SET_LB, OPTION_MSW);
  1613. switch (header & 0x00070000) {
  1614. case (HP100_MULTI_ADDR_HASH << 16):
  1615. case (HP100_MULTI_ADDR_NO_HASH << 16):
  1616. lp->stats.multicast++;
  1617. break;
  1618. }
  1619. } /* end of while(there are packets) loop */
  1620. #ifdef HP100_DEBUG_RX
  1621. printk("hp100_rx: %s: endn", dev->name);
  1622. #endif
  1623. }
  1624. /* 
  1625.  * Receive Function for Busmaster Mode
  1626.  */
  1627. static void hp100_rx_bm(struct net_device *dev)
  1628. {
  1629. int ioaddr = dev->base_addr;
  1630. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1631. hp100_ring_t *ptr;
  1632. u_int header;
  1633. int pkt_len;
  1634. #ifdef HP100_DEBUG_B
  1635. hp100_outw(0x4214, TRACE);
  1636. printk("hp100: %s: rx_bmn", dev->name);
  1637. #endif
  1638. #ifdef HP100_DEBUG
  1639. if (0 == lp->rxrcommit) {
  1640. printk("hp100: %s: rx_bm called although no PDLs were committed to adapter?n", dev->name);
  1641. return;
  1642. } else
  1643. /* RX_PKT_CNT states how many PDLs are currently formatted and available to 
  1644.  * the cards BM engine */
  1645. if ((hp100_inw(RX_PKT_CNT) & 0x00ff) >= lp->rxrcommit) {
  1646. printk("hp100: %s: More packets received than commited? RX_PKT_CNT=0x%x, commit=0x%xn",
  1647.      dev->name, hp100_inw(RX_PKT_CNT) & 0x00ff,
  1648.      lp->rxrcommit);
  1649. return;
  1650. }
  1651. #endif
  1652. while ((lp->rxrcommit > hp100_inb(RX_PDL))) {
  1653. /*
  1654.  * The packet was received into the pdl pointed to by lp->rxrhead (
  1655.  * the oldest pdl in the ring 
  1656.  */
  1657. /* First we get the header, which contains information about the */
  1658. /* actual length of the received packet. */
  1659. ptr = lp->rxrhead;
  1660. header = *(ptr->pdl - 1);
  1661. pkt_len = (header & HP100_PKT_LEN_MASK);
  1662. #ifdef HP100_DEBUG_BM
  1663. printk("hp100: %s: rx_bm: header@0x%x=0x%x length=%d, errors=0x%x, dest=0x%xn",
  1664. dev->name, (u_int) (ptr->pdl - 1), (u_int) header,
  1665. pkt_len, (header >> 16) & 0xfff8, (header >> 16) & 7);
  1666. printk("hp100: %s: RX_PDL_COUNT:0x%x TX_PDL_COUNT:0x%x, RX_PKT_CNT=0x%x PDH=0x%x, Data@0x%x len=0x%xn",
  1667.     dev->name, hp100_inb(RX_PDL), hp100_inb(TX_PDL),
  1668. hp100_inb(RX_PKT_CNT), (u_int) * (ptr->pdl),
  1669. (u_int) * (ptr->pdl + 3), (u_int) * (ptr->pdl + 4));
  1670. #endif
  1671. if ((pkt_len >= MIN_ETHER_SIZE) &&
  1672.     (pkt_len <= MAX_ETHER_SIZE)) {
  1673. if (ptr->skb == NULL) {
  1674. printk("hp100: %s: rx_bm: skb nulln", dev->name);
  1675. /* can happen if we only allocated room for the pdh due to memory shortage. */
  1676. lp->stats.rx_dropped++;
  1677. } else {
  1678. skb_trim(ptr->skb, pkt_len); /* Shorten it */
  1679. ptr->skb->protocol =
  1680.     eth_type_trans(ptr->skb, dev);
  1681. netif_rx(ptr->skb); /* Up and away... */
  1682. dev->last_rx = jiffies;
  1683. lp->stats.rx_packets++;
  1684. lp->stats.rx_bytes += pkt_len;
  1685. }
  1686. switch (header & 0x00070000) {
  1687. case (HP100_MULTI_ADDR_HASH << 16):
  1688. case (HP100_MULTI_ADDR_NO_HASH << 16):
  1689. lp->stats.multicast++;
  1690. break;
  1691. }
  1692. } else {
  1693. #ifdef HP100_DEBUG
  1694. printk("hp100: %s: rx_bm: Received bad packet (length=%d)n", dev->name, pkt_len);
  1695. #endif
  1696. if (ptr->skb != NULL)
  1697. dev_kfree_skb_any(ptr->skb);
  1698. lp->stats.rx_errors++;
  1699. }
  1700. lp->rxrhead = lp->rxrhead->next;
  1701. /* Allocate a new rx PDL (so lp->rxrcommit stays the same) */
  1702. if (0 == hp100_build_rx_pdl(lp->rxrtail, dev)) {
  1703. /* No space for skb, header can still be received. */
  1704. #ifdef HP100_DEBUG
  1705. printk("hp100: %s: rx_bm: No space for new PDL.n", dev->name);
  1706. #endif
  1707. return;
  1708. } else { /* successfully allocated new PDL - put it in ringlist at tail. */
  1709. hp100_outl((u32) lp->rxrtail->pdl_paddr, RX_PDA);
  1710. lp->rxrtail = lp->rxrtail->next;
  1711. }
  1712. }
  1713. }
  1714. /*
  1715.  *  statistics
  1716.  */
  1717. static hp100_stats_t *hp100_get_stats(struct net_device *dev)
  1718. {
  1719. unsigned long flags;
  1720. int ioaddr = dev->base_addr;
  1721. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1722. #ifdef HP100_DEBUG_B
  1723. hp100_outw(0x4215, TRACE);
  1724. #endif
  1725. spin_lock_irqsave(&lp->lock, flags);
  1726. hp100_ints_off(); /* Useful ? Jean II */
  1727. hp100_update_stats(dev);
  1728. hp100_ints_on();
  1729. spin_unlock_irqrestore(&lp->lock, flags);
  1730. return &(lp->stats);
  1731. }
  1732. static void hp100_update_stats(struct net_device *dev)
  1733. {
  1734. int ioaddr = dev->base_addr;
  1735. u_short val;
  1736. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1737. #ifdef HP100_DEBUG_B
  1738. hp100_outw(0x4216, TRACE);
  1739. printk("hp100: %s: update-statsn", dev->name);
  1740. #endif
  1741. /* Note: Statistics counters clear when read. */
  1742. hp100_page(MAC_CTRL);
  1743. val = hp100_inw(DROPPED) & 0x0fff;
  1744. lp->stats.rx_errors += val;
  1745. lp->stats.rx_over_errors += val;
  1746. val = hp100_inb(CRC);
  1747. lp->stats.rx_errors += val;
  1748. lp->stats.rx_crc_errors += val;
  1749. val = hp100_inb(ABORT);
  1750. lp->stats.tx_errors += val;
  1751. lp->stats.tx_aborted_errors += val;
  1752. hp100_page(PERFORMANCE);
  1753. }
  1754. static void hp100_misc_interrupt(struct net_device *dev)
  1755. {
  1756. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1757. #ifdef HP100_DEBUG_B
  1758. hp100_outw(0x4216, TRACE);
  1759. printk("hp100: %s: misc_interruptn", dev->name);
  1760. #endif
  1761. /* Note: Statistics counters clear when read. */
  1762. lp->stats.rx_errors++;
  1763. lp->stats.tx_errors++;
  1764. }
  1765. static void hp100_clear_stats(struct hp100_private *lp, int ioaddr)
  1766. {
  1767. unsigned long flags;
  1768. #ifdef HP100_DEBUG_B
  1769. hp100_outw(0x4217, TRACE);
  1770. printk("hp100: %s: clear_statsn", dev->name);
  1771. #endif
  1772. spin_lock_irqsave(&lp->lock, flags);
  1773. hp100_page(MAC_CTRL); /* get all statistics bytes */
  1774. hp100_inw(DROPPED);
  1775. hp100_inb(CRC);
  1776. hp100_inb(ABORT);
  1777. hp100_page(PERFORMANCE);
  1778. spin_unlock_irqrestore(&lp->lock, flags);
  1779. }
  1780. /*
  1781.  *  multicast setup
  1782.  */
  1783. /*
  1784.  *  Set or clear the multicast filter for this adapter.
  1785.  */
  1786. static void hp100_set_multicast_list(struct net_device *dev)
  1787. {
  1788. unsigned long flags;
  1789. int ioaddr = dev->base_addr;
  1790. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1791. #ifdef HP100_DEBUG_B
  1792. hp100_outw(0x4218, TRACE);
  1793. printk("hp100: %s: set_mc_listn", dev->name);
  1794. #endif
  1795. spin_lock_irqsave(&lp->lock, flags);
  1796. hp100_ints_off();
  1797. hp100_page(MAC_CTRL);
  1798. hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1); /* stop rx/tx */
  1799. if (dev->flags & IFF_PROMISC) {
  1800. lp->mac2_mode = HP100_MAC2MODE6; /* promiscuous mode = get all good */
  1801. lp->mac1_mode = HP100_MAC1MODE6; /* packets on the net */
  1802. memset(&lp->hash_bytes, 0xff, 8);
  1803. } else if (dev->mc_count || (dev->flags & IFF_ALLMULTI)) {
  1804. lp->mac2_mode = HP100_MAC2MODE5; /* multicast mode = get packets for */
  1805. lp->mac1_mode = HP100_MAC1MODE5; /* me, broadcasts and all multicasts */
  1806. #ifdef HP100_MULTICAST_FILTER /* doesn't work!!! */
  1807. if (dev->flags & IFF_ALLMULTI) {
  1808. /* set hash filter to receive all multicast packets */
  1809. memset(&lp->hash_bytes, 0xff, 8);
  1810. } else {
  1811. int i, j, idx;
  1812. u_char *addrs;
  1813. struct dev_mc_list *dmi;
  1814. memset(&lp->hash_bytes, 0x00, 8);
  1815. #ifdef HP100_DEBUG
  1816. printk("hp100: %s: computing hash filter - mc_count = %in", dev->name, dev->mc_count);
  1817. #endif
  1818. for (i = 0, dmi = dev->mc_list; i < dev->mc_count; i++, dmi = dmi->next) {
  1819. addrs = dmi->dmi_addr;
  1820. if ((*addrs & 0x01) == 0x01) { /* multicast address? */
  1821. #ifdef HP100_DEBUG
  1822. printk("hp100: %s: multicast = %02x:%02x:%02x:%02x:%02x:%02x, ",
  1823.      dev->name, addrs[0], addrs[1], addrs[2],
  1824.      addrs[3], addrs[4], addrs[5]);
  1825. #endif
  1826. for (j = idx = 0; j < 6; j++) {
  1827. idx ^= *addrs++ & 0x3f;
  1828. printk(":%02x:", idx);
  1829. }
  1830. #ifdef HP100_DEBUG
  1831. printk("idx = %in", idx);
  1832. #endif
  1833. lp->hash_bytes[idx >> 3] |= (1 << (idx & 7));
  1834. }
  1835. }
  1836. }
  1837. #else
  1838. memset(&lp->hash_bytes, 0xff, 8);
  1839. #endif
  1840. } else {
  1841. lp->mac2_mode = HP100_MAC2MODE3; /* normal mode = get packets for me */
  1842. lp->mac1_mode = HP100_MAC1MODE3; /* and broadcasts */
  1843. memset(&lp->hash_bytes, 0x00, 8);
  1844. }
  1845. if (((hp100_inb(MAC_CFG_1) & 0x0f) != lp->mac1_mode) ||
  1846.     (hp100_inb(MAC_CFG_2) != lp->mac2_mode)) {
  1847. int i;
  1848. hp100_outb(lp->mac2_mode, MAC_CFG_2);
  1849. hp100_andb(HP100_MAC1MODEMASK, MAC_CFG_1); /* clear mac1 mode bits */
  1850. hp100_orb(lp->mac1_mode, MAC_CFG_1); /* and set the new mode */
  1851. hp100_page(MAC_ADDRESS);
  1852. for (i = 0; i < 8; i++)
  1853. hp100_outb(lp->hash_bytes[i], HASH_BYTE0 + i);
  1854. #ifdef HP100_DEBUG
  1855. printk("hp100: %s: mac1 = 0x%x, mac2 = 0x%x, multicast hash = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02xn",
  1856.      dev->name, lp->mac1_mode, lp->mac2_mode,
  1857.      lp->hash_bytes[0], lp->hash_bytes[1],
  1858.      lp->hash_bytes[2], lp->hash_bytes[3],
  1859.      lp->hash_bytes[4], lp->hash_bytes[5],
  1860.      lp->hash_bytes[6], lp->hash_bytes[7]);
  1861. #endif
  1862. if (lp->lan_type == HP100_LAN_100) {
  1863. #ifdef HP100_DEBUG
  1864. printk("hp100: %s: 100VG MAC settings have changed - relogin.n", dev->name);
  1865. #endif
  1866. lp->hub_status = hp100_login_to_vg_hub(dev, TRUE); /* force a relogin to the hub */
  1867. }
  1868. } else {
  1869. int i;
  1870. u_char old_hash_bytes[8];
  1871. hp100_page(MAC_ADDRESS);
  1872. for (i = 0; i < 8; i++)
  1873. old_hash_bytes[i] = hp100_inb(HASH_BYTE0 + i);
  1874. if (memcmp(old_hash_bytes, &lp->hash_bytes, 8)) {
  1875. for (i = 0; i < 8; i++)
  1876. hp100_outb(lp->hash_bytes[i], HASH_BYTE0 + i);
  1877. #ifdef HP100_DEBUG
  1878. printk("hp100: %s: multicast hash = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02xn",
  1879. dev->name, lp->hash_bytes[0],
  1880. lp->hash_bytes[1], lp->hash_bytes[2],
  1881. lp->hash_bytes[3], lp->hash_bytes[4],
  1882. lp->hash_bytes[5], lp->hash_bytes[6],
  1883. lp->hash_bytes[7]);
  1884. #endif
  1885. if (lp->lan_type == HP100_LAN_100) {
  1886. #ifdef HP100_DEBUG
  1887. printk("hp100: %s: 100VG MAC settings have changed - relogin.n", dev->name);
  1888. #endif
  1889. lp->hub_status = hp100_login_to_vg_hub(dev, TRUE); /* force a relogin to the hub */
  1890. }
  1891. }
  1892. }
  1893. hp100_page(MAC_CTRL);
  1894. hp100_orb(HP100_RX_EN | HP100_RX_IDLE | /* enable rx */
  1895.   HP100_TX_EN | HP100_TX_IDLE, MAC_CFG_1); /* enable tx */
  1896. hp100_page(PERFORMANCE);
  1897. hp100_ints_on();
  1898. spin_unlock_irqrestore(&lp->lock, flags);
  1899. }
  1900. /*
  1901.  *  hardware interrupt handling
  1902.  */
  1903. static void hp100_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  1904. {
  1905. struct net_device *dev = (struct net_device *) dev_id;
  1906. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  1907. int ioaddr;
  1908. u_int val;
  1909. if (dev == NULL)
  1910. return;
  1911. ioaddr = dev->base_addr;
  1912. spin_lock(&lp->lock);
  1913. hp100_ints_off();
  1914. #ifdef HP100_DEBUG_B
  1915. hp100_outw(0x4219, TRACE);
  1916. #endif
  1917. /*  hp100_page( PERFORMANCE ); */
  1918. val = hp100_inw(IRQ_STATUS);
  1919. #ifdef HP100_DEBUG_IRQ
  1920. printk("hp100: %s: mode=%x,IRQ_STAT=0x%.4x,RXPKTCNT=0x%.2x RXPDL=0x%.2x TXPKTCNT=0x%.2x TXPDL=0x%.2xn",
  1921.      dev->name, lp->mode, (u_int) val, hp100_inb(RX_PKT_CNT),
  1922.      hp100_inb(RX_PDL), hp100_inb(TX_PKT_CNT), hp100_inb(TX_PDL));
  1923. #endif
  1924. if (val == 0) { /* might be a shared interrupt */
  1925. spin_unlock(&lp->lock);
  1926. hp100_ints_on();
  1927. return;
  1928. }
  1929. /* We're only interested in those interrupts we really enabled. */
  1930. /* val &= hp100_inw( IRQ_MASK ); */
  1931. /* 
  1932.  * RX_PDL_FILL_COMPL is set whenever a RX_PDL has been executed. A RX_PDL 
  1933.  * is considered executed whenever the RX_PDL data structure is no longer 
  1934.  * needed.
  1935.  */
  1936. if (val & HP100_RX_PDL_FILL_COMPL) {
  1937. if (lp->mode == 1)
  1938. hp100_rx_bm(dev);
  1939. else {
  1940. printk("hp100: %s: rx_pdl_fill_compl interrupt although not busmaster?n", dev->name);
  1941. }
  1942. }
  1943. /* 
  1944.  * The RX_PACKET interrupt is set, when the receive packet counter is
  1945.  * non zero. We use this interrupt for receiving in slave mode. In
  1946.  * busmaster mode, we use it to make sure we did not miss any rx_pdl_fill
  1947.  * interrupts. If rx_pdl_fill_compl is not set and rx_packet is set, then
  1948.  * we somehow have missed a rx_pdl_fill_compl interrupt.
  1949.  */
  1950. if (val & HP100_RX_PACKET) { /* Receive Packet Counter is non zero */
  1951. if (lp->mode != 1) /* non busmaster */
  1952. hp100_rx(dev);
  1953. else if (!(val & HP100_RX_PDL_FILL_COMPL)) {
  1954. /* Shouldnt happen - maybe we missed a RX_PDL_FILL Interrupt?  */
  1955. hp100_rx_bm(dev);
  1956. }
  1957. }
  1958. /*
  1959.  * Ack. that we have noticed the interrupt and thereby allow next one.
  1960.  * Note that this is now done after the slave rx function, since first
  1961.  * acknowledging and then setting ADV_NXT_PKT caused an extra interrupt
  1962.  * on the J2573.
  1963.  */
  1964. hp100_outw(val, IRQ_STATUS);
  1965. /*
  1966.  * RX_ERROR is set when a packet is dropped due to no memory resources on 
  1967.  * the card or when a RCV_ERR occurs. 
  1968.  * TX_ERROR is set when a TX_ABORT condition occurs in the MAC->exists  
  1969.  * only in the 802.3 MAC and happens when 16 collisions occur during a TX 
  1970.  */
  1971. if (val & (HP100_TX_ERROR | HP100_RX_ERROR)) {
  1972. #ifdef HP100_DEBUG_IRQ
  1973. printk("hp100: %s: TX/RX Error IRQn", dev->name);
  1974. #endif
  1975. hp100_update_stats(dev);
  1976. if (lp->mode == 1) {
  1977. hp100_rxfill(dev);
  1978. hp100_clean_txring(dev);
  1979. }
  1980. }
  1981. /* 
  1982.  * RX_PDA_ZERO is set when the PDA count goes from non-zero to zero. 
  1983.  */
  1984. if ((lp->mode == 1) && (val & (HP100_RX_PDA_ZERO)))
  1985. hp100_rxfill(dev);
  1986. /* 
  1987.  * HP100_TX_COMPLETE interrupt occurs when packet transmitted on wire 
  1988.  * is completed 
  1989.  */
  1990. if ((lp->mode == 1) && (val & (HP100_TX_COMPLETE)))
  1991. hp100_clean_txring(dev);
  1992. /* 
  1993.  * MISC_ERROR is set when either the LAN link goes down or a detected
  1994.  * bus error occurs.
  1995.  */
  1996. if (val & HP100_MISC_ERROR) { /* New for J2585B */
  1997. #ifdef HP100_DEBUG_IRQ
  1998. printk
  1999.     ("hp100: %s: Misc. Error Interrupt - Check cabling.n",
  2000.      dev->name);
  2001. #endif
  2002. if (lp->mode == 1) {
  2003. hp100_clean_txring(dev);
  2004. hp100_rxfill(dev);
  2005. }
  2006. hp100_misc_interrupt(dev);
  2007. }
  2008. spin_unlock(&lp->lock);
  2009. hp100_ints_on();
  2010. }
  2011. /*
  2012.  *  some misc functions
  2013.  */
  2014. static void hp100_start_interface(struct net_device *dev)
  2015. {
  2016. unsigned long flags;
  2017. int ioaddr = dev->base_addr;
  2018. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2019. #ifdef HP100_DEBUG_B
  2020. hp100_outw(0x4220, TRACE);
  2021. printk("hp100: %s: hp100_start_interfacen", dev->name);
  2022. #endif
  2023. spin_lock_irqsave(&lp->lock, flags);
  2024. /* Ensure the adapter does not want to request an interrupt when */
  2025. /* enabling the IRQ line to be active on the bus (i.e. not tri-stated) */
  2026. hp100_page(PERFORMANCE);
  2027. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  2028. hp100_outw(0xffff, IRQ_STATUS); /* ack all IRQs */
  2029. hp100_outw(HP100_FAKE_INT | HP100_INT_EN | HP100_RESET_LB,
  2030.    OPTION_LSW);
  2031. /* Un Tri-state int. TODO: Check if shared interrupts can be realised? */
  2032. hp100_outw(HP100_TRI_INT | HP100_RESET_HB, OPTION_LSW);
  2033. if (lp->mode == 1) {
  2034. /* Make sure BM bit is set... */
  2035. hp100_page(HW_MAP);
  2036. hp100_orb(HP100_BM_MASTER, BM);
  2037. hp100_rxfill(dev);
  2038. } else if (lp->mode == 2) {
  2039. /* Enable memory mapping. Note: Don't do this when busmaster. */
  2040. hp100_outw(HP100_MMAP_DIS | HP100_RESET_HB, OPTION_LSW);
  2041. }
  2042. hp100_page(PERFORMANCE);
  2043. hp100_outw(0xfefe, IRQ_MASK); /* mask off all ints */
  2044. hp100_outw(0xffff, IRQ_STATUS); /* ack IRQ */
  2045. /* enable a few interrupts: */
  2046. if (lp->mode == 1) { /* busmaster mode */
  2047. hp100_outw(HP100_RX_PDL_FILL_COMPL |
  2048.    HP100_RX_PDA_ZERO | HP100_RX_ERROR |
  2049.    /* HP100_RX_PACKET    | */
  2050.    /* HP100_RX_EARLY_INT |  */ HP100_SET_HB |
  2051.    /* HP100_TX_PDA_ZERO  |  */
  2052.    HP100_TX_COMPLETE |
  2053.    /* HP100_MISC_ERROR   |  */
  2054.    HP100_TX_ERROR | HP100_SET_LB, IRQ_MASK);
  2055. } else {
  2056. hp100_outw(HP100_RX_PACKET |
  2057.    HP100_RX_ERROR | HP100_SET_HB |
  2058.    HP100_TX_ERROR | HP100_SET_LB, IRQ_MASK);
  2059. }
  2060. /* Note : before hp100_set_multicast_list(), because it will play with
  2061.  * spinlock itself... Jean II */
  2062. spin_unlock_irqrestore(&lp->lock, flags);
  2063. /* Enable MAC Tx and RX, set MAC modes, ... */
  2064. hp100_set_multicast_list(dev);
  2065. }
  2066. static void hp100_stop_interface(struct net_device *dev)
  2067. {
  2068. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2069. int ioaddr = dev->base_addr;
  2070. u_int val;
  2071. #ifdef HP100_DEBUG_B
  2072. printk("hp100: %s: hp100_stop_interfacen", dev->name);
  2073. hp100_outw(0x4221, TRACE);
  2074. #endif
  2075. if (lp->mode == 1)
  2076. hp100_BM_shutdown(dev);
  2077. else {
  2078. /* Note: MMAP_DIS will be reenabled by start_interface */
  2079. hp100_outw(HP100_INT_EN | HP100_RESET_LB |
  2080.    HP100_TRI_INT | HP100_MMAP_DIS | HP100_SET_HB,
  2081.    OPTION_LSW);
  2082. val = hp100_inw(OPTION_LSW);
  2083. hp100_page(MAC_CTRL);
  2084. hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);
  2085. if (!(val & HP100_HW_RST))
  2086. return; /* If reset, imm. return ... */
  2087. /* ... else: busy wait until idle */
  2088. for (val = 0; val < 6000; val++)
  2089. if ((hp100_inb(MAC_CFG_1) & (HP100_TX_IDLE | HP100_RX_IDLE)) == (HP100_TX_IDLE | HP100_RX_IDLE)) {
  2090. hp100_page(PERFORMANCE);
  2091. return;
  2092. }
  2093. printk("hp100: %s: hp100_stop_interface - timeoutn", dev->name);
  2094. hp100_page(PERFORMANCE);
  2095. }
  2096. }
  2097. static void hp100_load_eeprom(struct net_device *dev, u_short probe_ioaddr)
  2098. {
  2099. int i;
  2100. int ioaddr = probe_ioaddr > 0 ? probe_ioaddr : dev->base_addr;
  2101. #ifdef HP100_DEBUG_B
  2102. hp100_outw(0x4222, TRACE);
  2103. #endif
  2104. hp100_page(EEPROM_CTRL);
  2105. hp100_andw(~HP100_EEPROM_LOAD, EEPROM_CTRL);
  2106. hp100_orw(HP100_EEPROM_LOAD, EEPROM_CTRL);
  2107. for (i = 0; i < 10000; i++)
  2108. if (!(hp100_inb(OPTION_MSW) & HP100_EE_LOAD))
  2109. return;
  2110. printk("hp100: %s: hp100_load_eeprom - timeoutn", dev->name);
  2111. }
  2112. /*  Sense connection status.
  2113.  *  return values: LAN_10  - Connected to 10Mbit/s network
  2114.  *                 LAN_100 - Connected to 100Mbit/s network
  2115.  *                 LAN_ERR - not connected or 100Mbit/s Hub down
  2116.  */
  2117. static int hp100_sense_lan(struct net_device *dev)
  2118. {
  2119. int ioaddr = dev->base_addr;
  2120. u_short val_VG, val_10;
  2121. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2122. #ifdef HP100_DEBUG_B
  2123. hp100_outw(0x4223, TRACE);
  2124. #endif
  2125. hp100_page(MAC_CTRL);
  2126. val_10 = hp100_inb(10_LAN_CFG_1);
  2127. val_VG = hp100_inb(VG_LAN_CFG_1);
  2128. hp100_page(PERFORMANCE);
  2129. #ifdef HP100_DEBUG
  2130. printk("hp100: %s: sense_lan: val_VG = 0x%04x, val_10 = 0x%04xn",
  2131.        dev->name, val_VG, val_10);
  2132. #endif
  2133. if (val_10 & HP100_LINK_BEAT_ST) /* 10Mb connection is active */
  2134. return HP100_LAN_10;
  2135. if (val_10 & HP100_AUI_ST) { /* have we BNC or AUI onboard? */
  2136. val_10 |= HP100_AUI_SEL | HP100_LOW_TH;
  2137. hp100_page(MAC_CTRL);
  2138. hp100_outb(val_10, 10_LAN_CFG_1);
  2139. hp100_page(PERFORMANCE);
  2140. return HP100_LAN_10;
  2141. }
  2142. if ((lp->id->id == 0x02019F022) ||
  2143.     (lp->id->id == 0x01042103c) || (lp->id->id == 0x01040103c))
  2144. return HP100_LAN_ERR; /* Those cards don't have a 100 Mbit connector */
  2145. if (val_VG & HP100_LINK_CABLE_ST) /* Can hear the HUBs tone. */
  2146. return HP100_LAN_100;
  2147. return HP100_LAN_ERR;
  2148. }
  2149. static int hp100_down_vg_link(struct net_device *dev)
  2150. {
  2151. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2152. int ioaddr = dev->base_addr;
  2153. unsigned long time;
  2154. long savelan, newlan;
  2155. #ifdef HP100_DEBUG_B
  2156. hp100_outw(0x4224, TRACE);
  2157. printk("hp100: %s: down_vg_linkn", dev->name);
  2158. #endif
  2159. hp100_page(MAC_CTRL);
  2160. time = jiffies + (HZ / 4);
  2161. do {
  2162. if (hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST)
  2163. break;
  2164. if (!in_interrupt()) {
  2165. set_current_state(TASK_INTERRUPTIBLE);
  2166. schedule_timeout(1);
  2167. }
  2168. } while (time_after(time, jiffies));
  2169. if (time_after_eq(jiffies, time)) /* no signal->no logout */
  2170. return 0;
  2171. /* Drop the VG Link by clearing the link up cmd and load addr. */
  2172. hp100_andb(~(HP100_LOAD_ADDR | HP100_LINK_CMD), VG_LAN_CFG_1);
  2173. hp100_orb(HP100_VG_SEL, VG_LAN_CFG_1);
  2174. /* Conditionally stall for >250ms on Link-Up Status (to go down) */
  2175. time = jiffies + (HZ / 2);
  2176. do {
  2177. if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
  2178. break;
  2179. if (!in_interrupt()) {
  2180. set_current_state(TASK_INTERRUPTIBLE);
  2181. schedule_timeout(1);
  2182. }
  2183. } while (time_after(time, jiffies));
  2184. #ifdef HP100_DEBUG
  2185. if (time_after_eq(jiffies, time))
  2186. printk("hp100: %s: down_vg_link: Link does not go down?n", dev->name);
  2187. #endif
  2188. /* To prevent condition where Rev 1 VG MAC and old hubs do not complete */
  2189. /* logout under traffic (even though all the status bits are cleared),  */
  2190. /* do this workaround to get the Rev 1 MAC in its idle state */
  2191. if (lp->chip == HP100_CHIPID_LASSEN) {
  2192. /* Reset VG MAC to insure it leaves the logoff state even if */
  2193. /* the Hub is still emitting tones */
  2194. hp100_andb(~HP100_VG_RESET, VG_LAN_CFG_1);
  2195. udelay(1500); /* wait for >1ms */
  2196. hp100_orb(HP100_VG_RESET, VG_LAN_CFG_1); /* Release Reset */
  2197. udelay(1500);
  2198. }
  2199. /* New: For lassen, switch to 10 Mbps mac briefly to clear training ACK */
  2200. /* to get the VG mac to full reset. This is not req.d with later chips */
  2201. /* Note: It will take the between 1 and 2 seconds for the VG mac to be */
  2202. /* selected again! This will be left to the connect hub function to */
  2203. /* perform if desired.  */
  2204. if (lp->chip == HP100_CHIPID_LASSEN) {
  2205. /* Have to write to 10 and 100VG control registers simultaneously */
  2206. savelan = newlan = hp100_inl(10_LAN_CFG_1); /* read 10+100 LAN_CFG regs */
  2207. newlan &= ~(HP100_VG_SEL << 16);
  2208. newlan |= (HP100_DOT3_MAC) << 8;
  2209. hp100_andb(~HP100_AUTO_MODE, MAC_CFG_3); /* Autosel off */
  2210. hp100_outl(newlan, 10_LAN_CFG_1);
  2211. /* Conditionally stall for 5sec on VG selected. */
  2212. time = jiffies + (HZ * 5);
  2213. do {
  2214. if (!(hp100_inb(MAC_CFG_4) & HP100_MAC_SEL_ST))
  2215. break;
  2216. if (!in_interrupt()) {
  2217. set_current_state(TASK_INTERRUPTIBLE);
  2218. schedule_timeout(1);
  2219. }
  2220. } while (time_after(time, jiffies));
  2221. hp100_orb(HP100_AUTO_MODE, MAC_CFG_3); /* Autosel back on */
  2222. hp100_outl(savelan, 10_LAN_CFG_1);
  2223. }
  2224. time = jiffies + (3 * HZ); /* Timeout 3s */
  2225. do {
  2226. if ((hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST) == 0)
  2227. break;
  2228. if (!in_interrupt()) {
  2229. set_current_state(TASK_INTERRUPTIBLE);
  2230. schedule_timeout(1);
  2231. }
  2232. } while (time_after(time, jiffies));
  2233. if (time_before_eq(time, jiffies)) {
  2234. #ifdef HP100_DEBUG
  2235. printk("hp100: %s: down_vg_link: timeoutn", dev->name);
  2236. #endif
  2237. return -EIO;
  2238. }
  2239. time = jiffies + (2 * HZ); /* This seems to take a while.... */
  2240. do {
  2241. if (!in_interrupt()) {
  2242. set_current_state(TASK_INTERRUPTIBLE);
  2243. schedule_timeout(1);
  2244. }
  2245. } while (time_after(time, jiffies));
  2246. return 0;
  2247. }
  2248. static int hp100_login_to_vg_hub(struct net_device *dev, u_short force_relogin)
  2249. {
  2250. int ioaddr = dev->base_addr;
  2251. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2252. u_short val = 0;
  2253. unsigned long time;
  2254. int startst;
  2255. #ifdef HP100_DEBUG_B
  2256. hp100_outw(0x4225, TRACE);
  2257. printk("hp100: %s: login_to_vg_hubn", dev->name);
  2258. #endif
  2259. /* Initiate a login sequence iff VG MAC is enabled and either Load Address
  2260.  * bit is zero or the force relogin flag is set (e.g. due to MAC address or
  2261.  * promiscuous mode change)
  2262.  */
  2263. hp100_page(MAC_CTRL);
  2264. startst = hp100_inb(VG_LAN_CFG_1);
  2265. if ((force_relogin == TRUE) || (hp100_inb(MAC_CFG_4) & HP100_MAC_SEL_ST)) {
  2266. #ifdef HP100_DEBUG_TRAINING
  2267. printk("hp100: %s: Start trainingn", dev->name);
  2268. #endif
  2269. /* Ensure VG Reset bit is 1 (i.e., do not reset) */
  2270. hp100_orb(HP100_VG_RESET, VG_LAN_CFG_1);
  2271. /* If Lassen AND auto-select-mode AND VG tones were sensed on */
  2272. /* entry then temporarily put them into force 100Mbit mode */
  2273. if ((lp->chip == HP100_CHIPID_LASSEN) && (startst & HP100_LINK_CABLE_ST))
  2274. hp100_andb(~HP100_DOT3_MAC, 10_LAN_CFG_2);
  2275. /* Drop the VG link by zeroing Link Up Command and Load Address  */
  2276. hp100_andb(~(HP100_LINK_CMD /* |HP100_LOAD_ADDR */ ), VG_LAN_CFG_1);
  2277. #ifdef HP100_DEBUG_TRAINING
  2278. printk("hp100: %s: Bring down the linkn", dev->name);
  2279. #endif
  2280. /* Wait for link to drop */
  2281. time = jiffies + (HZ / 10);
  2282. do {
  2283. if (~(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
  2284. break;
  2285. if (!in_interrupt()) {
  2286. set_current_state(TASK_INTERRUPTIBLE);
  2287. schedule_timeout(1);
  2288. }
  2289. } while (time_after(time, jiffies));
  2290. /* Start an addressed training and optionally request promiscuous port */
  2291. if ((dev->flags) & IFF_PROMISC) {
  2292. hp100_orb(HP100_PROM_MODE, VG_LAN_CFG_2);
  2293. if (lp->chip == HP100_CHIPID_LASSEN)
  2294. hp100_orw(HP100_MACRQ_PROMSC, TRAIN_REQUEST);
  2295. } else {
  2296. hp100_andb(~HP100_PROM_MODE, VG_LAN_CFG_2);
  2297. /* For ETR parts we need to reset the prom. bit in the training
  2298.  * register, otherwise promiscious mode won't be disabled.
  2299.  */
  2300. if (lp->chip == HP100_CHIPID_LASSEN) {
  2301. hp100_andw(~HP100_MACRQ_PROMSC, TRAIN_REQUEST);
  2302. }
  2303. }
  2304. /* With ETR parts, frame format request bits can be set. */
  2305. if (lp->chip == HP100_CHIPID_LASSEN)
  2306. hp100_orb(HP100_MACRQ_FRAMEFMT_EITHER, TRAIN_REQUEST);
  2307. hp100_orb(HP100_LINK_CMD | HP100_LOAD_ADDR | HP100_VG_RESET, VG_LAN_CFG_1);
  2308. /* Note: Next wait could be omitted for Hood and earlier chips under */
  2309. /* certain circumstances */
  2310. /* TODO: check if hood/earlier and skip wait. */
  2311. /* Wait for either short timeout for VG tones or long for login    */
  2312. /* Wait for the card hardware to signalise link cable status ok... */
  2313. hp100_page(MAC_CTRL);
  2314. time = jiffies + (1 * HZ); /* 1 sec timeout for cable st */
  2315. do {
  2316. if (hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST)
  2317. break;
  2318. if (!in_interrupt()) {
  2319. set_current_state(TASK_INTERRUPTIBLE);
  2320. schedule_timeout(1);
  2321. }
  2322. } while (time_before(jiffies, time));
  2323. if (time_after_eq(jiffies, time)) {
  2324. #ifdef HP100_DEBUG_TRAINING
  2325. printk("hp100: %s: Link cable status not ok? Training aborted.n", dev->name);
  2326. #endif
  2327. } else {
  2328. #ifdef HP100_DEBUG_TRAINING
  2329. printk
  2330.     ("hp100: %s: HUB tones detected. Trying to train.n",
  2331.      dev->name);
  2332. #endif
  2333. time = jiffies + (2 * HZ); /* again a timeout */
  2334. do {
  2335. val = hp100_inb(VG_LAN_CFG_1);
  2336. if ((val & (HP100_LINK_UP_ST))) {
  2337. #ifdef HP100_DEBUG_TRAINING
  2338. printk("hp100: %s: Passed training.n", dev->name);
  2339. #endif
  2340. break;
  2341. }
  2342. if (!in_interrupt()) {
  2343. set_current_state(TASK_INTERRUPTIBLE);
  2344. schedule_timeout(1);
  2345. }
  2346. } while (time_after(time, jiffies));
  2347. }
  2348. /* If LINK_UP_ST is set, then we are logged into the hub. */
  2349. if (time_before_eq(jiffies, time) && (val & HP100_LINK_UP_ST)) {
  2350. #ifdef HP100_DEBUG_TRAINING
  2351. printk("hp100: %s: Successfully logged into the HUB.n", dev->name);
  2352. if (lp->chip == HP100_CHIPID_LASSEN) {
  2353. val = hp100_inw(TRAIN_ALLOW);
  2354. printk("hp100: %s: Card supports 100VG MAC Version "%s" ",
  2355.      dev->name, (hp100_inw(TRAIN_REQUEST) & HP100_CARD_MACVER) ? "802.12" : "Pre");
  2356. printk("Driver will use MAC Version "%s"n", (val & HP100_HUB_MACVER) ? "802.12" : "Pre");
  2357. printk("hp100: %s: Frame format is %s.n", dev->name, (val & HP100_MALLOW_FRAMEFMT) ? "802.5" : "802.3");
  2358. }
  2359. #endif
  2360. } else {
  2361. /* If LINK_UP_ST is not set, login was not successful */
  2362. printk("hp100: %s: Problem logging into the HUB.n", dev->name);
  2363. if (lp->chip == HP100_CHIPID_LASSEN) {
  2364. /* Check allowed Register to find out why there is a problem. */
  2365. val = hp100_inw(TRAIN_ALLOW); /* wont work on non-ETR card */
  2366. #ifdef HP100_DEBUG_TRAINING
  2367. printk("hp100: %s: MAC Configuration requested: 0x%04x, HUB allowed: 0x%04xn", dev->name, hp100_inw(TRAIN_REQUEST), val);
  2368. #endif
  2369. if (val & HP100_MALLOW_ACCDENIED)
  2370. printk("hp100: %s: HUB access denied.n", dev->name);
  2371. if (val & HP100_MALLOW_CONFIGURE)
  2372. printk("hp100: %s: MAC Configuration is incompatible with the Network.n", dev->name);
  2373. if (val & HP100_MALLOW_DUPADDR)
  2374. printk("hp100: %s: Duplicate MAC Address on the Network.n", dev->name);
  2375. }
  2376. }
  2377. /* If we have put the chip into forced 100 Mbit mode earlier, go back */
  2378. /* to auto-select mode */
  2379. if ((lp->chip == HP100_CHIPID_LASSEN) && (startst & HP100_LINK_CABLE_ST)) {
  2380. hp100_page(MAC_CTRL);
  2381. hp100_orb(HP100_DOT3_MAC, 10_LAN_CFG_2);
  2382. }
  2383. val = hp100_inb(VG_LAN_CFG_1);
  2384. /* Clear the MISC_ERROR Interrupt, which might be generated when doing the relogin */
  2385. hp100_page(PERFORMANCE);
  2386. hp100_outw(HP100_MISC_ERROR, IRQ_STATUS);
  2387. if (val & HP100_LINK_UP_ST)
  2388. return (0); /* login was ok */
  2389. else {
  2390. printk("hp100: %s: Training failed.n", dev->name);
  2391. hp100_down_vg_link(dev);
  2392. return -EIO;
  2393. }
  2394. }
  2395. /* no forced relogin & already link there->no training. */
  2396. return -EIO;
  2397. }
  2398. static void hp100_cascade_reset(struct net_device *dev, u_short enable)
  2399. {
  2400. int ioaddr = dev->base_addr;
  2401. struct hp100_private *lp = (struct hp100_private *) dev->priv;
  2402. #ifdef HP100_DEBUG_B
  2403. hp100_outw(0x4226, TRACE);
  2404. printk("hp100: %s: cascade_resetn", dev->name);
  2405. #endif
  2406. if (enable == TRUE) {
  2407. hp100_outw(HP100_HW_RST | HP100_RESET_LB, OPTION_LSW);
  2408. if (lp->chip == HP100_CHIPID_LASSEN) {
  2409. /* Lassen requires a PCI transmit fifo reset */
  2410. hp100_page(HW_MAP);
  2411. hp100_andb(~HP100_PCI_RESET, PCICTRL2);
  2412. hp100_orb(HP100_PCI_RESET, PCICTRL2);
  2413. /* Wait for min. 300 ns */
  2414. /* we cant use jiffies here, because it may be */
  2415. /* that we have disabled the timer... */
  2416. udelay(400);
  2417. hp100_andb(~HP100_PCI_RESET, PCICTRL2);
  2418. hp100_page(PERFORMANCE);
  2419. }
  2420. } else { /* bring out of reset */
  2421. hp100_outw(HP100_HW_RST | HP100_SET_LB, OPTION_LSW);
  2422. udelay(400);
  2423. hp100_page(PERFORMANCE);
  2424. }
  2425. }
  2426. #ifdef HP100_DEBUG
  2427. void hp100_RegisterDump(struct net_device *dev)
  2428. {
  2429. int ioaddr = dev->base_addr;
  2430. int Page;
  2431. int Register;
  2432. /* Dump common registers */
  2433. printk("hp100: %s: Cascade Register Dumpn", dev->name);
  2434. printk("hardware id #1: 0x%.2xn", hp100_inb(HW_ID));
  2435. printk("hardware id #2/paging: 0x%.2xn", hp100_inb(PAGING));
  2436. printk("option #1: 0x%.4xn", hp100_inw(OPTION_LSW));
  2437. printk("option #2: 0x%.4xn", hp100_inw(OPTION_MSW));
  2438. /* Dump paged registers */
  2439. for (Page = 0; Page < 8; Page++) {
  2440. /* Dump registers */
  2441. printk("page: 0x%.2xn", Page);
  2442. outw(Page, ioaddr + 0x02);
  2443. for (Register = 0x8; Register < 0x22; Register += 2) {
  2444. /* Display Register contents except data port */
  2445. if (((Register != 0x10) && (Register != 0x12)) || (Page > 0)) {
  2446. printk("0x%.2x = 0x%.4xn", Register, inw(ioaddr + Register));
  2447. }
  2448. }
  2449. }
  2450. hp100_page(PERFORMANCE);
  2451. }
  2452. #endif
  2453. /*
  2454.  *  module section
  2455.  */
  2456. #ifdef MODULE
  2457. MODULE_LICENSE("GPL");
  2458. MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, "
  2459.               "Siegfried "Frieder" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>");
  2460. MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adapters");
  2461. /*
  2462.  * Note: if you have more than five 100vg cards in your pc, feel free to
  2463.  * increase this value 
  2464.  */
  2465. #define HP100_DEVICES 5
  2466. /*
  2467.  * Note: to register three eisa or pci devices, use:
  2468.  * option hp100 hp100_port=0,0,0
  2469.  *        to register one card at io 0x280 as eth239, use:
  2470.  * option hp100 hp100_port=0x280 hp100_name=eth239
  2471.  */
  2472. /* Parameters set by insmod */
  2473. static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 };
  2474. MODULE_PARM(hp100_port, "1-" __MODULE_STRING(HP100_DEVICES) "i");
  2475. /* Allocate HP100_DEVICES strings of length IFNAMSIZ, one string for each device */
  2476. static char hp100_name[HP100_DEVICES][IFNAMSIZ] = { "", "", "", "", "" };
  2477. /* Allow insmod to write those HP100_DEVICES strings individually */
  2478. MODULE_PARM(hp100_name, "1-" __MODULE_STRING(HP100_DEVICES) "c" __MODULE_STRING(IFNAMSIZ));
  2479. /* List of devices */
  2480. static struct net_device *hp100_devlist[HP100_DEVICES];
  2481. static void release_dev(int i)
  2482. {
  2483. struct net_device *d = hp100_devlist[i];
  2484. struct hp100_private *p = (struct hp100_private *) d->priv;
  2485. unregister_netdev(d);
  2486. release_region(d->base_addr, HP100_REGION_SIZE);
  2487. if (p->mode == 1) /* busmaster */
  2488. kfree(p->page_vaddr);
  2489. if (p->mem_ptr_virt)
  2490. iounmap(p->mem_ptr_virt);
  2491. kfree(d->priv);
  2492. d->priv = NULL;
  2493. kfree(d);
  2494. hp100_devlist[i] = NULL;
  2495. }
  2496. static int __init hp100_module_init(void)
  2497. {
  2498. int i, cards;
  2499. if (hp100_port == 0 && !EISA_bus && !pcibios_present())
  2500. printk("hp100: You should not use auto-probing with insmod!n");
  2501. /* Loop on all possible base addresses */
  2502. i = -1;
  2503. cards = 0;
  2504. while ((hp100_port[++i] != -1) && (i < HP100_DEVICES)) {
  2505. /* Create device and set basics args */
  2506. hp100_devlist[i] = kmalloc(sizeof(struct net_device), GFP_KERNEL);
  2507. if (!hp100_devlist[i])
  2508. goto fail;
  2509. memset(hp100_devlist[i], 0x00, sizeof(struct net_device));
  2510. #if LINUX_VERSION_CODE >= 0x020362 /* 2.3.99-pre7 */
  2511. memcpy(hp100_devlist[i]->name, hp100_name[i], IFNAMSIZ); /* Copy name */
  2512. #else
  2513. hp100_devlist[i]->name = hp100_name[i];
  2514. #endif /* LINUX_VERSION_CODE >= 0x020362 */
  2515. hp100_devlist[i]->base_addr = hp100_port[i];
  2516. hp100_devlist[i]->init = &hp100_probe;
  2517. /* Try to create the device */
  2518. if (register_netdev(hp100_devlist[i]) != 0) {
  2519. /* DeAllocate everything */
  2520. /* Note: if dev->priv is mallocated, there is no way to fail */
  2521. kfree(hp100_devlist[i]);
  2522. hp100_devlist[i] = (struct net_device *) NULL;
  2523. } else
  2524. cards++;
  2525. } /* Loop over all devices */
  2526. return cards > 0 ? 0 : -ENODEV;
  2527.       fail:
  2528. while (cards && --i)
  2529. if (hp100_devlist[i]) {
  2530. release_dev(i);
  2531. --cards;
  2532. }
  2533. return -ENOMEM;
  2534. }
  2535. static void __exit hp100_module_exit(void)
  2536. {
  2537. int i;
  2538. /* TODO: Check if all skb's are released/freed. */
  2539. for (i = 0; i < HP100_DEVICES; i++)
  2540. if (hp100_devlist[i] != (struct net_device *) NULL)
  2541. release_dev(i);
  2542. }
  2543. module_init(hp100_module_init)
  2544. module_exit(hp100_module_exit)
  2545. #endif /* MODULE */
  2546. /*
  2547.  * Local variables:
  2548.  *  compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c hp100.c"
  2549.  *  c-indent-level: 2
  2550.  *  tab-width: 8
  2551.  * End:
  2552.  */