28 #include <linux/module.h>
29 #include <linux/kernel.h>
30 #include <linux/errno.h>
32 #include <linux/types.h>
33 #include <linux/pci.h>
34 #include <linux/atm.h>
35 #include <linux/atmdev.h>
38 #include <linux/device.h>
41 #include <linux/ctype.h>
42 #include <linux/swab.h>
43 #include <linux/slab.h>
45 #define VERSION "0.07"
46 #define PTAG "solos-pci"
48 #define CONFIG_RAM_SIZE 128
49 #define FLAGS_ADDR 0x7C
50 #define IRQ_EN_ADDR 0x78
52 #define IRQ_CLEAR 0x70
53 #define WRITE_FLASH 0x6C
55 #define FLASH_BLOCK 0x64
56 #define FLASH_BUSY 0x60
57 #define FPGA_MODE 0x5C
58 #define FLASH_MODE 0x58
59 #define TX_DMA_ADDR(port) (0x40 + (4 * (port)))
60 #define RX_DMA_ADDR(port) (0x30 + (4 * (port)))
62 #define DATA_RAM_SIZE 32768
64 #define OLD_BUF_SIZE 4096
66 #define SOLOS_PAGE 512
67 #define FPGA_BLOCK (FPGA_PAGE * 8)
68 #define SOLOS_BLOCK (SOLOS_PAGE * 8)
70 #define RX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2)
71 #define TX_BUF(card, nr) ((card->buffers) + (nr)*(card->buffer_size)*2 + (card->buffer_size))
72 #define FLASH_BUF ((card->buffers) + 4*(card->buffer_size)*2)
74 #define RX_DMA_SIZE 2048
76 #define FPGA_VERSION(a,b) (((a) << 8) + (b))
77 #define LEGACY_BUFFERS 2
78 #define DMA_SUPPORTED 4
81 static int atmdebug = 0;
82 static int firmware_upgrade = 0;
83 static int fpga_upgrade = 0;
84 static int db_firmware_upgrade = 0;
85 static int db_fpga_upgrade = 0;
100 #define SKB_CB(skb) ((struct solos_skb_cb *)skb->cb)
103 #define PKT_COMMAND 1
140 #define SOLOS_CHAN(atmdev) ((int)(unsigned long)(atmdev)->phy_data)
153 MODULE_PARM_DESC(db_firmware_upgrade,
"Initiate daughter board Solos firmware upgrade");
167 static int list_vccs(
int vci);
171 static void solos_bh(
unsigned long);
194 skb = alloc_skb(
sizeof(*header) + buflen,
GFP_KERNEL);
196 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in solos_param_show()\n");
200 header = (
void *)
skb_put(skb,
sizeof(*header));
202 buflen =
snprintf((
void *)&header[1], buflen - 1,
219 fpga_queue(card, prm.port, skb,
NULL);
230 buflen = prm.response->len;
231 memcpy(buf, prm.response->data, buflen);
238 const char *buf,
size_t count)
250 skb = alloc_skb(
sizeof(*header) + buflen,
GFP_KERNEL);
252 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in solos_param_store()\n");
256 header = (
void *)
skb_put(skb,
sizeof(*header));
258 buflen =
snprintf((
void *)&header[1], buflen - 1,
259 "L%05d\n%s\n%s\n",
current->pid, attr->
attr.name, buf);
275 fpga_queue(card, prm.port, skb,
NULL);
291 if (skb->
data[buflen - 1] ==
'\n')
296 else if (buflen == 5 && !
strncmp(skb->
data,
"ERROR", 5))
303 dev_warn(&card->
dev->dev,
"Unexpected parameter response: '%s'\n",
312 static char *next_string(
struct sk_buff *skb)
315 char *
this = skb->
data;
317 for (i = 0; i < skb->
len; i++) {
318 if (
this[i] ==
'\n') {
342 char *
str, *
end, *state_str, *
snr, *attn;
343 int ver, rate_up, rate_down;
348 str = next_string(skb);
354 dev_warn(&card->
dev->dev,
"Unexpected status interrupt version %d\n",
359 str = next_string(skb);
362 if (!
strcmp(str,
"ERROR")) {
363 dev_dbg(&card->
dev->dev,
"Status packet indicated Solos error on port %d (starting up?)\n",
372 str = next_string(skb);
379 state_str = next_string(skb);
384 if (
strcmp(state_str,
"Showtime")) {
386 dev_info(&card->
dev->dev,
"Port %d: %s\n", port, state_str);
390 snr = next_string(skb);
393 attn = next_string(skb);
397 dev_info(&card->
dev->dev,
"Port %d: %s @%d/%d kb/s%s%s%s%s\n",
398 port, state_str, rate_down/1000, rate_up/1000,
399 snr[0]?
", SNR ":
"", snr, attn[0]?
", Attn ":
"", attn);
401 card->
atmdev[
port]->link_rate = rate_down / 424;
407 static int process_command(
struct solos_card *card,
int port,
struct sk_buff *skb)
420 skb->
data[6] !=
'\n')
427 if (prm->
port == port && prm->
pid == cmdpid) {
451 return sprintf(buf,
"No data.\n");
461 static int send_command(
struct solos_card *card,
int dev,
const char *buf,
size_t size)
466 if (size > (
BUF_SIZE -
sizeof(*header))) {
467 dev_dbg(&card->
dev->dev,
"Command is too big. Dropping request\n");
470 skb = alloc_skb(size +
sizeof(*header),
GFP_ATOMIC);
472 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in send_command()\n");
476 header = (
void *)
skb_put(skb,
sizeof(*header));
485 fpga_queue(card, dev, skb,
NULL);
491 const char *buf,
size_t count)
497 err = send_command(card,
SOLOS_CHAN(atmdev), buf, count);
505 #define SOLOS_ATTR_RO(x) static DEVICE_ATTR(x, 0444, solos_param_show, NULL);
506 #define SOLOS_ATTR_RW(x) static DEVICE_ATTR(x, 0644, solos_param_show, solos_param_store);
513 #define SOLOS_ATTR_RO(x) &dev_attr_##x.attr,
514 #define SOLOS_ATTR_RW(x) &dev_attr_##x.attr,
516 static struct attribute *solos_attrs[] = {
522 .attrs = solos_attrs,
523 .
name =
"parameters",
536 fw_name =
"solos-FPGA.bin";
540 fw_name =
"solos-Firmware.bin";
545 fw_name =
"solos-db-FPGA.bin";
548 dev_info(&card->
dev->dev,
"FPGA version doesn't support"
549 " daughter board upgrades\n");
555 fw_name =
"solos-Firmware.bin";
558 dev_info(&card->
dev->dev,
"FPGA version doesn't support"
559 " daughter board upgrades\n");
570 dev_info(&card->
dev->dev,
"Flash upgrade starting\n");
572 numblocks = fw->
size / blocksize;
574 dev_info(&card->
dev->dev,
"Number of blocks: %d\n", numblocks);
576 dev_info(&card->
dev->dev,
"Changing FPGA to Update mode\n");
581 if(chip == 0 || chip == 2)
582 dev_info(&card->
dev->dev,
"Set FPGA Flash mode to FPGA Chip Erase\n");
583 if(chip == 1 || chip == 3)
584 dev_info(&card->
dev->dev,
"Set FPGA Flash mode to Solos Chip Erase\n");
591 for (offset = 0; offset < fw->
size; offset += blocksize) {
602 for(i = 0; i < blocksize; i += 4) {
620 dev_info(&card->
dev->dev,
"Returning FPGA to Data mode\n");
633 tasklet_schedule(&card->
tlet);
640 void solos_bh(
unsigned long card_arg)
652 card_flags = fpga_tx(card);
654 for (port = 0; port < card->
nr_ports; port++) {
655 if (card_flags & (0x10 << port)) {
668 header = (
void *)skb->
data;
670 skb_put(skb, size +
sizeof(*header));
675 rx_done |= 0x10 <<
port;
681 dev_warn(&card->
dev->dev,
"Invalid buffer size\n");
688 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff for RX\n");
693 RX_BUF(card, port) +
sizeof(*header),
697 dev_info(&card->
dev->dev,
"Received: port %d\n", port);
698 dev_info(&card->
dev->dev,
"size: %d VPI: %d VCI: %d\n",
710 dev_warn(&card->
dev->dev,
"Received packet for unknown VPI.VCI %d.%d on port %d\n",
721 if (process_status(card, port, skb) &&
723 dev_warn(&card->
dev->dev,
"Bad status packet of %d bytes on port %d:\n", skb->
len, port);
731 if (process_command(card, port, skb))
734 if (skb_queue_len(&card->
cli_queue[port]) > 10) {
736 dev_warn(&card->
dev->dev,
"Dropping console response on port %d\n",
751 pci_map_single(card->
dev, skb->
data,
758 dev_warn(&card->
dev->dev,
"Failed to allocate RX skb");
761 tasklet_schedule(&card->
tlet);
782 if (vcc->
dev == dev && vcc->
vci == vci &&
793 static int list_vccs(
int vci)
831 static int popen(
struct atm_vcc *vcc)
838 dev_warn(&card->
dev->dev,
"Unsupported ATM type %d\n",
846 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in popen()\n");
849 header = (
void *)
skb_put(skb,
sizeof(*header));
866 static void pclose(
struct atm_vcc *vcc)
874 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in pclose()\n");
877 header = (
void *)
skb_put(skb,
sizeof(*header));
896 static int print_buffer(
struct sk_buff *buf)
903 for (i = 0; i < len; i++){
934 old_len = skb_queue_len(&card->
tx_queue[port]);
965 tx_pending = card->
tx_mask & ~card_flags;
967 for (port = 0; tx_pending; tx_pending >>= 1, port++) {
968 if (tx_pending & 1) {
982 tx_started |= 1 <<
port;
1001 dev_info(&card->
dev->dev,
"Transmitted: port %d\n",
1003 dev_info(&card->
dev->dev,
"size: %d VPI: %d VCI: %d\n",
1006 print_buffer(oldskb);
1009 vcc =
SKB_CB(oldskb)->vcc;
1013 solos_pop(vcc, oldskb);
1023 spin_unlock_irqrestore(&card->
tx_lock, flags);
1034 if (pktlen > (
BUF_SIZE -
sizeof(*header))) {
1035 dev_warn(&card->
dev->dev,
"Length of PDU is too large. Dropping PDU.\n");
1036 solos_pop(vcc, skb);
1040 if (!skb_clone_writable(skb,
sizeof(*header))) {
1044 if (skb_headroom(skb) <
sizeof(*header))
1045 expand_by =
sizeof(*header) - skb_headroom(skb);
1049 dev_warn(&card->
dev->dev,
"pskb_expand_head failed.\n");
1050 solos_pop(vcc, skb);
1055 header = (
void *)
skb_push(skb,
sizeof(*header));
1101 dev_warn(&dev->
dev,
"Failed to enable PCI device\n");
1107 dev_warn(&dev->
dev,
"Failed to set 32-bit DMA mask\n");
1113 dev_warn(&dev->
dev,
"Failed to request regions\n");
1119 dev_warn(&dev->
dev,
"Failed to ioremap config registers\n");
1120 goto out_release_regions;
1124 dev_warn(&dev->
dev,
"Failed to ioremap data buffers\n");
1125 goto out_unmap_config;
1137 fpga_ver = (data32 & 0x0000FFFF);
1138 major_ver = ((data32 & 0xFF000000) >> 24);
1139 minor_ver = ((data32 & 0x00FF0000) >> 16);
1145 dev_info(&dev->
dev,
"Solos FPGA Version %d.%02d svn-%d\n",
1146 major_ver, minor_ver, fpga_ver);
1148 if (fpga_ver < 37 && (fpga_upgrade || firmware_upgrade ||
1149 db_fpga_upgrade || db_firmware_upgrade)) {
1151 "FPGA too old; cannot upgrade flash. Use JTAG.\n");
1152 fpga_upgrade = firmware_upgrade = 0;
1153 db_fpga_upgrade = db_firmware_upgrade = 0;
1166 card->
nr_ports = (data32 & 0x000000FF);
1168 pci_set_drvdata(dev, card);
1180 dev_dbg(&card->
dev->dev,
"Failed to request interrupt IRQ: %d\n", dev->
irq);
1181 goto out_unmap_both;
1187 flash_upgrade(card, 0);
1189 if (firmware_upgrade)
1190 flash_upgrade(card, 1);
1192 if (db_fpga_upgrade)
1193 flash_upgrade(card, 2);
1195 if (db_firmware_upgrade)
1196 flash_upgrade(card, 3);
1198 err = atm_init(card, &dev->
dev);
1210 pci_set_drvdata(dev,
NULL);
1214 out_release_regions:
1225 for (i = 0; i < card->
nr_ports; i++) {
1229 skb_queue_head_init(&card->
tx_queue[i]);
1230 skb_queue_head_init(&card->
cli_queue[i]);
1234 dev_err(&card->
dev->dev,
"Could not register ATM device %d\n", i);
1239 dev_err(&card->
dev->dev,
"Could not register console for ATM device %d\n", i);
1241 dev_err(&card->
dev->dev,
"Could not register parameter group for ATM device %d\n", i);
1243 dev_info(&card->
dev->dev,
"Registered ATM device %d\n", card->
atmdev[i]->number);
1245 card->
atmdev[
i]->ci_range.vpi_bits = 8;
1246 card->
atmdev[
i]->ci_range.vci_bits = 16;
1248 card->
atmdev[
i]->phy_data = (
void *)(
unsigned long)
i;
1251 skb = alloc_skb(
sizeof(*header),
GFP_ATOMIC);
1253 dev_warn(&card->
dev->dev,
"Failed to allocate sk_buff in atm_init()\n");
1257 header = (
void *)
skb_put(skb,
sizeof(*header));
1264 fpga_queue(card, i, skb,
NULL);
1269 static void atm_remove(
struct solos_card *card)
1273 for (i = 0; i < card->
nr_ports; i++) {
1277 dev_info(&card->
dev->dev,
"Unregistering ATM device %d\n", card->
atmdev[i]->number);
1301 static void fpga_remove(
struct pci_dev *dev)
1303 struct solos_card *card = pci_get_drvdata(dev);
1327 pci_set_drvdata(dev,
NULL);
1340 .id_table = fpga_pci_tbl,
1341 .probe = fpga_probe,
1342 .remove = fpga_remove,
1346 static int __init solos_pci_init(
void)
1349 return pci_register_driver(&fpga_driver);
1352 static void __exit solos_pci_exit(
void)