1086 netxen_nic_pci_set_crbwindow_2M(adapter, &off);
1087 }
1088
1089 DPRINTK(1, INFO, "write data %lx to offset %llx, len=%d\n",
1090 *(unsigned long *)data, off, len);
1091
1092 switch (len) {
1093 case 1:
1094 writeb(*(uint8_t *)data, (void *)off);
1095 break;
1096 case 2:
1097 writew(*(uint16_t *)data, (void *)off);
1098 break;
1099 case 4:
1100 writel(*(uint32_t *)data, (void *)off);
1101 break;
1102 case 8:
1103 writeq(*(uint64_t *)data, (void *)off);
1104 break;
1105 default:
1106 DPRINTK(1, INFO,
1107 "writing data %lx to offset %llx, num words=%d\n",
1108 *(unsigned long *)data, off, (len>>3));
1109 break;
1110 }
1111 if (rv == 1) {
1112 crb_win_unlock(adapter);
1113 write_unlock_irqrestore(&adapter->adapter_lock, flags);
1114 }
1115
1116 return 0;
1117}
1118
1119int
1120netxen_nic_hw_read_wx_2M(struct netxen_adapter *adapter,
1121 ulong off, void *data, int len)
1122{
1123 unsigned long flags = 0;
1124 int rv;
1125
1126 rv = netxen_nic_pci_get_crb_addr_2M(adapter, &off, len);