34 #include <linux/pci.h>
35 #include <linux/netdevice.h>
37 #include <linux/slab.h>
38 #include <linux/stat.h>
47 #define IPATH_MIN_USER_PORT_BUFCNT 7
53 static ushort ipath_cfgports;
64 static ushort ipath_kpiobufs;
66 static int ipath_set_kpiobufs(
const char *
val,
struct kernel_param *kp);
96 if (skbinfo ==
NULL) {
102 for (e = 0; e < egrcnt; e++) {
112 if (!skbinfo[e].
skb) {
114 "eager TID %u\n", e);
116 dev_kfree_skb(skbinfo[--e].skb);
128 for (e = 0; e < egrcnt; e++) {
190 (
unsigned long long) ibc);
191 ipath_write_kreg(dd, dd->
ipath_kregs->kr_ibcctrl, ibc);
194 val = ipath_read_kreg64(dd, dd->
ipath_kregs->kr_scratch);
251 else if (ipath_cfgports <= dd->ipath_portcnt) {
253 ipath_dbg(
"Configured to use %u ports out of %u in chip\n",
258 ipath_dbg(
"Tried to configured to use %u ports; chip "
259 "only supports %u\n", ipath_cfgports,
260 ipath_read_kreg32(dd,
277 pd = create_portdata0(dd);
287 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvtidcnt);
289 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvtidbase);
291 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvegrcnt);
293 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvegrbase);
295 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_pagealign);
297 ipath_read_kreg64(dd, dd->
ipath_kregs->kr_sendpiobufbase);
298 val = ipath_read_kreg64(dd, dd->
ipath_kregs->kr_sendpiosize);
304 val = ipath_read_kreg64(dd, dd->
ipath_kregs->kr_sendpiobufcnt);
321 ipath_dbg(
"%u 2k(%x) piobufs @ %p, %u 4k(%x) @ %p "
366 ipath_read_kreg64(dd, dd->
ipath_kregs->kr_scratch);
369 ipath_write_kreg(dd, dd->
ipath_kregs->kr_control, 0ULL);
371 rtmp = ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvtidcnt);
374 "reset, now %u, using original\n",
376 rtmp = ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvtidbase);
379 "reset, now %u, using original\n",
381 rtmp = ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvegrcnt);
384 "reset, now %u, using original\n",
386 rtmp = ipath_read_kreg32(dd, dd->
ipath_kregs->kr_rcvegrbase);
389 "reset, now %u, using original\n",
448 sizeof(
struct page *));
451 "array, no expected sends!\n");
460 "array, no expected sends!\n");
470 static void enable_chip(
struct ipath_devdata *dd,
int reinit)
496 ipath_read_kreg64(dd, dd->
ipath_kregs->kr_scratch);
557 static int init_housekeeping(
struct ipath_devdata *dd,
int reinit)
583 ipath_read_kreg64(dd, dd->
ipath_kregs->kr_revision);
591 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_sendregbase);
593 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_counterregbase);
595 ipath_read_kreg32(dd, dd->
ipath_kregs->kr_userregbase);
604 "giving up initialization\n");
612 ipath_write_kreg (dd, dd->
ipath_kregs->kr_hwdiagctrl, 0);
615 ipath_write_kreg(dd, dd->
ipath_kregs->kr_errorclear,
625 "chip swversion is %d (%llx), failng\n",
629 INFINIPATH_R_SOFTWARE_MASK,
647 "ChipABI %u.%u, %s, InfiniPath%u %u.%u, PCI %u, "
655 INFINIPATH_R_SOFTWARE_MASK);
663 ret = init_chip_reset(dd);
665 ret = init_chip_first(dd);
671 static void verify_interrupt(
unsigned long opaque)
711 u32 kpiobufs, defkbufs;
717 ret = init_housekeeping(dd, reinit);
738 ipath_write_kreg(dd, dd->
ipath_kregs->kr_rcvhdrcnt,
760 if (ipath_kpiobufs && (ipath_kpiobufs +
762 int i = (
int) piobufs -
767 "%d for kernel leaves too few for %d user ports "
768 "(%d each); using %u\n", ipath_kpiobufs,
769 piobufs, uports, IPATH_MIN_USER_PORT_BUFCNT, i);
775 }
else if (ipath_kpiobufs)
776 kpiobufs = ipath_kpiobufs;
786 ipath_dbg(
"%u pbufs/port leaves some unused, add 1 buffer to "
793 "each for %u user ports\n", kpiobufs,
807 ipath_write_kreg(dd, dd->
ipath_kregs->kr_rcvhdrentsize,
809 ipath_write_kreg(dd, dd->
ipath_kregs->kr_rcvhdrsize,
813 ret = init_pioavailregs(dd);
814 init_shadow_tids(dd);
819 ipath_write_kreg(dd, dd->
ipath_kregs->kr_sendpioavailaddr,
826 val = ipath_read_kreg64(dd, dd->
ipath_kregs->kr_sendpioavailaddr);
829 "SendPIOAvailAddr written as %lx, "
830 "read back as %llx\n",
832 (
unsigned long long) val);
843 ipath_write_kreg(dd, dd->
ipath_kregs->kr_hwerrmask, 0ULL);
844 ipath_write_kreg(dd, dd->
ipath_kregs->kr_hwerrclear,
846 ipath_write_kreg(dd, dd->
ipath_kregs->kr_control, 0ULL);
852 if (bringup_link(dd)) {
864 ipath_write_kreg(dd, dd->
ipath_kregs->kr_hwerrclear,
866 ipath_write_kreg(dd, dd->
ipath_kregs->kr_hwerrmask,
872 ipath_write_kreg(dd, dd->
ipath_kregs->kr_errormask,
876 ipath_read_kreg64(dd, dd->
ipath_kregs->kr_errormask);
897 npd = create_portdata0(dd);
904 " for port 0, failing\n");
911 ret = create_port0_egr(dd);
914 "rcvhdrq and/or egr bufs\n");
918 enable_chip(dd, reinit);
944 "Couldn't allocate 0x%lx bytes for dummy hdrq\n",
945 dd->
ipath_pd[0]->port_rcvhdrq_size);
955 ipath_write_kreg(dd, dd->
ipath_kregs->kr_intclear, 0ULL);
1011 "setup interrupt address\n");
1024 ipath_dbg(
"Failed (%d) to initialize chip\n", ret);
1031 static int ipath_set_kpiobufs(
const char *
str,
struct kernel_param *kp)
1034 unsigned long flags;
1059 "Allocating %d PIO bufs for kernel leaves "
1060 "too few for %d user ports (%d each)\n",
1070 ipath_kpiobufs =
val;
1073 spin_unlock_irqrestore(&ipath_devs_lock, flags);