umem.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:40k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * mm.c - Micro Memory(tm) PCI memory board block device driver - v2.3
  3.  *
  4.  * (C) 2001 San Mehat <nettwerk@valinux.com>
  5.  * (C) 2001 Johannes Erdfelt <jerdfelt@valinux.com>
  6.  * (C) 2001 NeilBrown <neilb@cse.unsw.edu.au>
  7.  *
  8.  * This driver for the Micro Memory PCI Memory Module with Battery Backup
  9.  * is Copyright Micro Memory Inc 2001-2002.  All rights reserved.
  10.  *
  11.  * This driver is released to the public under the terms of the
  12.  *  GNU GENERAL PUBLIC LICENSE version 2
  13.  * See the file COPYING for details.
  14.  *
  15.  * This driver provides a standard block device interface for Micro Memory(tm)
  16.  * PCI based RAM boards.
  17.  * 10/05/01: Phap Nguyen - Rebuilt the driver
  18.  * 10/22/01: Phap Nguyen - v2.1 Added disk partitioning
  19.  * 29oct2001:NeilBrown   - Use make_request_fn instead of request_fn
  20.  *                       - use stand disk partitioning (so fdisk works).
  21.  * 08nov2001:NeilBrown  - change driver name from "mm" to "umem"
  22.  *  - incorporate into main kernel
  23.  * 08apr2002:NeilBrown   - Move some of interrupt handle to tasklet
  24.  *  - use spin_lock_bh instead of _irq
  25.  *  - Never block on make_request.  queue
  26.  *    bh's instead.
  27.  *  - unregister umem from devfs at mod unload
  28.  *  - Change version to 2.3
  29.  * 07Nov2001:Phap Nguyen - Select pci read command: 06, 12, 15 (Decimal)
  30.  * 07Jan2002: P. Nguyen  - Used PCI Memory Write & Invalidate for DMA
  31.  */
  32. #include <linux/config.h>
  33. #include <linux/sched.h>
  34. #include <linux/fs.h>
  35. #include <linux/kernel.h>
  36. #include <linux/mm.h>
  37. #include <linux/mman.h>
  38. #include <linux/ioctl.h>
  39. #include <linux/module.h>
  40. #include <linux/init.h>
  41. #include <linux/interrupt.h>
  42. #include <linux/smp_lock.h>
  43. #include <linux/timer.h>
  44. #include <linux/pci.h>
  45. #include <linux/slab.h>
  46. #include <linux/fcntl.h>        /* O_ACCMODE */
  47. #include <linux/hdreg.h>  /* HDIO_GETGEO */
  48. #include <linux/umem.h>
  49. #include <asm/uaccess.h>
  50. #include <asm/io.h>
  51. #define PRINTK(x...) do {} while (0)
  52. #define dprintk(x...) do {} while (0)
  53. /*#define dprintk(x...) printk(x) */
  54. #define MM_MAXCARDS 4
  55. #define MM_RAHEAD 2      /* two sectors */
  56. #define MM_BLKSIZE 1024  /* 1k blocks */
  57. #define MM_HARDSECT 512  /* 512-byte hardware sectors */
  58. #define MM_SHIFT 6       /* max 64 partitions on 4 cards  */
  59. #define DEVICE_NR(device) (MINOR(device)>>MM_SHIFT)
  60. /*
  61.  * Version Information
  62.  */
  63. #define DRIVER_VERSION "v2.3"
  64. #define DRIVER_AUTHOR "San Mehat, Johannes Erdfelt, NeilBrown"
  65. #define DRIVER_DESC "Micro Memory(tm) PCI memory board block driver"
  66. static int debug;
  67. /* #define HW_TRACE(x)     writeb(x,cards[0].csr_remap + MEMCTRLSTATUS_MAGIC) */
  68. #define HW_TRACE(x)
  69. #define DEBUG_LED_ON_TRANSFER 0x01
  70. #define DEBUG_BATTERY_POLLING 0x02
  71. MODULE_PARM(debug, "i");
  72. MODULE_PARM_DESC(debug, "Debug bitmask");
  73. static int init_mem = 0;
  74. MODULE_PARM(init_mem, "i");
  75. MODULE_PARM_DESC(init_mem, "Initialize memory");
  76. static int pci_read_cmd = 0x0C; /* Read Multiple */
  77. MODULE_PARM(pci_read_cmd, "i");
  78. MODULE_PARM_DESC(pci_read_cmd, "PCI read command");
  79. static int pci_write_cmd = 0x0F; /* Write and Invalidate */
  80. MODULE_PARM(pci_write_cmd, "i");
  81. MODULE_PARM_DESC(pci_write_cmd, "PCI write command");
  82. static int pci_cmds;
  83. #define MAJOR_NR UMEM_MAJOR
  84. #include <linux/blk.h>
  85. #include <linux/blkpg.h>
  86. static devfs_handle_t devfs_handle;      /*  For the directory */
  87. struct cardinfo {
  88. int card_number;
  89. struct pci_dev *dev;
  90. int irq;
  91. unsigned long csr_base;
  92. unsigned char *csr_remap;
  93. unsigned long csr_len;
  94. #ifdef CONFIG_MM_MAP_MEMORY
  95. unsigned long mem_base;
  96. unsigned char *mem_remap;
  97. unsigned long mem_len;
  98. #endif
  99. unsigned int win_size; /* PCI window size */
  100. unsigned int mm_size;  /* size in kbytes */
  101. struct buffer_head *bh, **bhtail;
  102. struct mm_page {
  103. dma_addr_t page_dma;
  104. struct mm_dma_desc *desc;
  105. int   cnt, headcnt;
  106. struct buffer_head *bh, **bhtail;
  107. } mm_pages[2];
  108. #define DESC_PER_PAGE ((PAGE_SIZE*2)/sizeof(struct mm_dma_desc))
  109. int  Active, Ready;
  110. struct tasklet_struct tasklet;
  111. unsigned int dma_status;
  112. struct tq_struct plug_tq;
  113. struct {
  114. int good;
  115. int warned;
  116. unsigned long last_change;
  117. } battery[2];
  118. atomic_t  usage;
  119. spinlock_t  lock;
  120. int check_batteries;
  121. };
  122. static struct cardinfo cards[MM_MAXCARDS];
  123. static struct block_device_operations mm_fops;
  124. static struct timer_list battery_timer;
  125. static int              mm_hardsect  [MM_MAXCARDS << MM_SHIFT];
  126. static int              mm_blocksizes[MM_MAXCARDS << MM_SHIFT];
  127. static int              mm_sizes[MM_MAXCARDS << MM_SHIFT];
  128. static struct hd_struct mm_partitions[MM_MAXCARDS << MM_SHIFT];
  129. static int num_cards = 0;
  130. struct gendisk mm_gendisk = {
  131.     major:         MAJOR_NR, /* Major number assigned later */
  132.     major_name:    "umem", /* Name of the major device */
  133.     minor_shift:   MM_SHIFT, /* Shift to get device number */
  134.     max_p:         1 << MM_SHIFT, /* Number of partitions */
  135.     fops:          &mm_fops,    /* Block dev operations */
  136. /* everything else is dynamic */
  137. };
  138. static void check_batteries(struct cardinfo *card);
  139. /*
  140. -----------------------------------------------------------------------------------
  141. --                           get_userbit
  142. -----------------------------------------------------------------------------------
  143. */
  144. static int get_userbit(struct cardinfo *card, int bit)
  145. {
  146. unsigned char led;
  147. led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL);
  148. return led & bit;
  149. }
  150. /*
  151. -----------------------------------------------------------------------------------
  152. --                            set_userbit
  153. -----------------------------------------------------------------------------------
  154. */
  155. static int set_userbit(struct cardinfo *card, int bit, unsigned char state)
  156. {
  157. unsigned char led;
  158. led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL);
  159. if (state)
  160. led |= bit;
  161. else
  162. led &= ~bit;
  163. writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL);
  164. return 0;
  165. }
  166. /*
  167. -----------------------------------------------------------------------------------
  168. --                             set_led
  169. -----------------------------------------------------------------------------------
  170. */
  171. /*
  172.  * NOTE: For the power LED, use the LED_POWER_* macros since they differ
  173.  */
  174. static void set_led(struct cardinfo *card, int shift, unsigned char state)
  175. {
  176. unsigned char led;
  177. led = readb(card->csr_remap + MEMCTRLCMD_LEDCTRL);
  178. if (state == LED_FLIP)
  179. led ^= (1<<shift);
  180. else {
  181. led &= ~(0x03 << shift);
  182. led |= (state << shift);
  183. }
  184. writeb(led, card->csr_remap + MEMCTRLCMD_LEDCTRL);
  185. }
  186. #ifdef MM_DIAG
  187. /*
  188. -----------------------------------------------------------------------------------
  189. --                              dump_regs
  190. -----------------------------------------------------------------------------------
  191. */
  192. static void dump_regs(struct cardinfo *card)
  193. {
  194. unsigned char *p;
  195. int i, i1;
  196. p = card->csr_remap;
  197. for (i = 0; i < 8; i++) {
  198. printk(KERN_DEBUG "%p   ", p);
  199. for (i1 = 0; i1 < 16; i1++)
  200. printk("%02x ", *p++);
  201. printk("n");
  202. }
  203. }
  204. #endif
  205. /*
  206. -----------------------------------------------------------------------------------
  207. --                            dump_dmastat
  208. -----------------------------------------------------------------------------------
  209. */
  210. static void dump_dmastat(struct cardinfo *card, unsigned int dmastat)
  211. {
  212. printk(KERN_DEBUG "MM%d*: DMAstat - ", card->card_number);
  213. if (dmastat & DMASCR_ANY_ERR)
  214. printk("ANY_ERR ");
  215. if (dmastat & DMASCR_MBE_ERR)
  216. printk("MBE_ERR ");
  217. if (dmastat & DMASCR_PARITY_ERR_REP)
  218. printk("PARITY_ERR_REP ");
  219. if (dmastat & DMASCR_PARITY_ERR_DET)
  220. printk("PARITY_ERR_DET ");
  221. if (dmastat & DMASCR_SYSTEM_ERR_SIG)
  222. printk("SYSTEM_ERR_SIG ");
  223. if (dmastat & DMASCR_TARGET_ABT)
  224. printk("TARGET_ABT ");
  225. if (dmastat & DMASCR_MASTER_ABT)
  226. printk("MASTER_ABT ");
  227. if (dmastat & DMASCR_CHAIN_COMPLETE)
  228. printk("CHAIN_COMPLETE ");
  229. if (dmastat & DMASCR_DMA_COMPLETE)
  230. printk("DMA_COMPLETE ");
  231. printk("n");
  232. }
  233. /*
  234.  * Theory of request handling
  235.  *
  236.  * Each buffer_head is assigned to one mm_dma_desc.
  237.  * We have two pages of mm_dma_desc, holding about 64 descriptors
  238.  * each.  These are allocated at init time.
  239.  * One page is "Ready" and is either full, or can have request added.
  240.  * The other page might be "Active", which DMA is happening on it.
  241.  *
  242.  * Whenever IO on the active page completes, the Ready page is activated
  243.  * and the ex-Active page is clean out and made Ready.
  244.  * Otherwise the Ready page is only activated when it becomes full, or
  245.  * when mm_unplug_device is called via run_task_queue(&tq_disk).
  246.  *
  247.  * If a request arrives while both pages a full, it is queued, and b_rdev is
  248.  * overloaded to record whether it was a read or a write.
  249.  *
  250.  * The interrupt handler only polls the device to clear the interrupt.
  251.  * The processing of the result is done in a tasklet.
  252.  */
  253. static void mm_start_io(struct cardinfo *card)
  254. {
  255. /* we have the lock, we know there is
  256.  * no IO active, and we know that card->Active
  257.  * is set
  258.  */
  259. struct mm_dma_desc *desc;
  260. struct mm_page *page;
  261. int offset;
  262. /* make the last descriptor end the chain */
  263. page = &card->mm_pages[card->Active];
  264. PRINTK("start_io: %d %d->%dn", card->Active, page->headcnt, page->cnt-1);
  265. desc = &page->desc[page->cnt-1];
  266. desc->control_bits |= cpu_to_le32(DMASCR_CHAIN_COMP_EN);
  267. desc->control_bits &= ~cpu_to_le32(DMASCR_CHAIN_EN);
  268. desc->sem_control_bits = desc->control_bits;
  269.        
  270. if (debug & DEBUG_LED_ON_TRANSFER)
  271. set_led(card, LED_REMOVE, LED_ON);
  272. desc = &page->desc[page->headcnt];
  273. writel(0, card->csr_remap + DMA_PCI_ADDR);
  274. writel(0, card->csr_remap + DMA_PCI_ADDR + 4);
  275. writel(0, card->csr_remap + DMA_LOCAL_ADDR);
  276. writel(0, card->csr_remap + DMA_LOCAL_ADDR + 4);
  277. writel(0, card->csr_remap + DMA_TRANSFER_SIZE);
  278. writel(0, card->csr_remap + DMA_TRANSFER_SIZE + 4);
  279. writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR);
  280. writel(0, card->csr_remap + DMA_SEMAPHORE_ADDR + 4);
  281. offset = ((char*)desc) - ((char*)page->desc);
  282. writel(cpu_to_le32((page->page_dma+offset)&0xffffffff),
  283.        card->csr_remap + DMA_DESCRIPTOR_ADDR);
  284. writel(cpu_to_le32((page->page_dma)>>31>>1),
  285.        card->csr_remap + DMA_DESCRIPTOR_ADDR + 4);
  286. /* Go, go, go */
  287. writel(cpu_to_le32(DMASCR_GO | DMASCR_CHAIN_EN | pci_cmds),
  288.        card->csr_remap + DMA_STATUS_CTRL);
  289. }
  290. static int add_bh(struct cardinfo *card);
  291. static void activate(struct cardinfo *card)
  292. {
  293. /* if No page is Active, and Ready is 
  294.  * not empty, then switch Ready page
  295.  * to active and start IO.
  296.  * Then add any bh's that are available to Ready
  297.  */
  298. do {
  299. while (add_bh(card))
  300. ;
  301. if (card->Active == -1 &&
  302.     card->mm_pages[card->Ready].cnt > 0) {
  303. card->Active = card->Ready;
  304. card->Ready = 1-card->Ready;
  305. mm_start_io(card);
  306. }
  307. } while (card->Active == -1 && add_bh(card));
  308. }
  309. static inline void reset_page(struct mm_page *page)
  310. {
  311. page->cnt = 0;
  312. page->headcnt = 0;
  313. page->bh = NULL;
  314. page->bhtail = & page->bh;
  315. }
  316. static void mm_unplug_device(void *data)
  317. {
  318. struct cardinfo *card = data;
  319. spin_lock_bh(&card->lock);
  320. activate(card);
  321. spin_unlock_bh(&card->lock);
  322. }
  323. /* 
  324.  * If there is room on Ready page, take
  325.  * one bh off list and add it.
  326.  * return 1 if there was room, else 0.
  327.  */
  328. static int add_bh(struct cardinfo *card)
  329. {
  330. struct mm_page *p;
  331. struct mm_dma_desc *desc;
  332. dma_addr_t dma_handle;
  333. int offset;
  334. struct buffer_head *bh;
  335. int rw;
  336. bh = card->bh;
  337. if (!bh)
  338. return 0;
  339. if (card->mm_pages[card->Ready].cnt >= DESC_PER_PAGE)
  340. return 0;
  341. card->bh = bh->b_reqnext;
  342. if (card->bh == NULL)
  343. card->bhtail = &card->bh;
  344. rw = bh->b_rdev;
  345. dma_handle = pci_map_page(card->dev, bh->b_page, bh_offset(bh),
  346.   bh->b_size,
  347.   (rw==READ) ?
  348.   PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE);
  349. p = &card->mm_pages[card->Ready];
  350. desc = &p->desc[p->cnt];
  351. p->cnt++;
  352. *(p->bhtail) = bh;
  353. p->bhtail = &(bh->b_reqnext);
  354. bh->b_reqnext = NULL;
  355. desc->data_dma_handle = dma_handle;
  356. desc->pci_addr = cpu_to_le64((u64)desc->data_dma_handle);
  357. desc->local_addr= cpu_to_le64(bh->b_rsector << 9);
  358. desc->transfer_size = cpu_to_le32(bh->b_size);
  359. offset = ( ((char*)&desc->sem_control_bits) - ((char*)p->desc));
  360. desc->sem_addr = cpu_to_le64((u64)(p->page_dma+offset));
  361. desc->zero1 = desc->zero2 = 0;
  362. offset = ( ((char*)(desc+1)) - ((char*)p->desc));
  363. desc->next_desc_addr = cpu_to_le64(p->page_dma+offset);
  364. desc->control_bits = cpu_to_le32(DMASCR_GO|DMASCR_ERR_INT_EN|
  365.  DMASCR_PARITY_INT_EN|
  366.  DMASCR_CHAIN_EN |
  367.  DMASCR_SEM_EN |
  368.  pci_cmds);
  369. if (rw == WRITE)
  370. desc->control_bits |= cpu_to_le32(DMASCR_TRANSFER_READ);
  371. desc->sem_control_bits = desc->control_bits;
  372. return 1;
  373. }
  374. static void process_page(unsigned long data)
  375. {
  376. /* check if any of the requests in the page are DMA_COMPLETE,
  377.  * and deal with them appropriately.
  378.  * If we find a descriptor without DMA_COMPLETE in the semaphore, then
  379.  * dma must have hit an error on that descriptor, so use dma_status instead
  380.  * and assume that all following descriptors must be re-tried.
  381.  */
  382. struct mm_page *page;
  383. struct buffer_head *ok=NULL, *fail=NULL;
  384. struct cardinfo *card = (struct cardinfo *)data;
  385. unsigned int dma_status = card->dma_status;
  386. spin_lock_bh(&card->lock);
  387. if (card->Active < 0)
  388. goto out_unlock;
  389. page = &card->mm_pages[card->Active];
  390. while (page->bh != NULL) {
  391. struct buffer_head *bh = page->bh;
  392. struct mm_dma_desc *desc = &page->desc[page->headcnt];
  393. int control = le32_to_cpu(desc->sem_control_bits);
  394. int last=0;
  395. if (!(control & DMASCR_DMA_COMPLETE)) {
  396. control = dma_status;
  397. last=1; 
  398. }
  399. page->headcnt++;
  400. page->bh = bh->b_reqnext;
  401. pci_unmap_page(card->dev, desc->data_dma_handle, bh->b_size,
  402.  (control& DMASCR_TRANSFER_READ) ?
  403. PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
  404. if (!(control & DMASCR_HARD_ERROR)) {
  405. /* it worked just fine */
  406. bh->b_reqnext = ok;
  407. ok = bh;
  408. } else {
  409. /* error */
  410. bh->b_reqnext = fail;
  411. fail = bh;
  412. printk(KERN_WARNING "MM%d: I/O error on sector %lx/%xn",
  413.        card->card_number, bh->b_rsector, bh->b_size);
  414. dump_dmastat(card, control);
  415. }
  416. if (last) break;
  417. }
  418. if (debug & DEBUG_LED_ON_TRANSFER)
  419. set_led(card, LED_REMOVE, LED_OFF);
  420. if (card->check_batteries) {
  421. card->check_batteries = 0;
  422. check_batteries(card);
  423. }
  424. if (page->headcnt >= page->cnt) {
  425. reset_page(page);
  426. card->Active = -1;
  427. activate(card);
  428. } else {
  429. /* haven't finished with this one yet */
  430. PRINTK("do some moren");
  431. mm_start_io(card);
  432. }
  433.  out_unlock:
  434. spin_unlock_bh(&card->lock);
  435. while(ok) {
  436. struct buffer_head *bh = ok;
  437. ok = bh->b_reqnext;
  438. bh->b_reqnext = NULL;
  439. bh->b_end_io(bh, 1);
  440. }
  441. while(fail) {
  442. struct buffer_head *bh = fail;
  443. fail = bh->b_reqnext;
  444. bh->b_reqnext = NULL;
  445. bh->b_end_io(bh, 0);
  446. }
  447. }
  448. /*
  449. -----------------------------------------------------------------------------------
  450. --                              mm_make_request
  451. -----------------------------------------------------------------------------------
  452. */
  453. static int mm_make_request(request_queue_t *q, int rw, struct buffer_head *bh)
  454. {
  455. struct cardinfo *card = &cards[DEVICE_NR(bh->b_rdev)];
  456. PRINTK("mm_make_request %d %ld %dn", rw, bh->b_rsector, bh->b_size);
  457. bh->b_rsector += mm_partitions[MINOR(bh->b_rdev)].start_sect;
  458. bh->b_rdev = rw; /* overloading... */
  459. spin_lock_bh(&card->lock);
  460. *card->bhtail = bh;
  461. bh->b_reqnext = NULL;
  462. card->bhtail = &bh->b_reqnext;
  463. spin_unlock_bh(&card->lock);
  464. queue_task(&card->plug_tq, &tq_disk);
  465. return 0;
  466. }
  467. /*
  468. -----------------------------------------------------------------------------------
  469. --                              mm_interrupt
  470. -----------------------------------------------------------------------------------
  471. */
  472. static void mm_interrupt(int irq, void *__card, struct pt_regs *regs)
  473. {
  474. struct cardinfo *card = (struct cardinfo *) __card;
  475. unsigned int dma_status;
  476. unsigned short cfg_status;
  477. HW_TRACE(0x30);
  478. dma_status = le32_to_cpu(readl(card->csr_remap + DMA_STATUS_CTRL));
  479. if (!(dma_status & (DMASCR_ERROR_MASK | DMASCR_CHAIN_COMPLETE))) {
  480. /* interrupt wasn't for me ... */
  481. return;
  482.         }
  483. /* clear COMPLETION interrupts */
  484. writel(cpu_to_le32(DMASCR_DMA_COMPLETE|DMASCR_CHAIN_COMPLETE),
  485.        card->csr_remap+ DMA_STATUS_CTRL);
  486. /* log errors and clear interrupt status */
  487. if (dma_status & DMASCR_ANY_ERR) {
  488. unsigned int data_log1, data_log2;
  489. unsigned int addr_log1, addr_log2;
  490. unsigned char stat, count, syndrome, check;
  491. stat = readb(card->csr_remap + MEMCTRLCMD_ERRSTATUS);
  492. data_log1 = le32_to_cpu(readl(card->csr_remap + ERROR_DATA_LOG));
  493. data_log2 = le32_to_cpu(readl(card->csr_remap + ERROR_DATA_LOG + 4));
  494. addr_log1 = le32_to_cpu(readl(card->csr_remap + ERROR_ADDR_LOG));
  495. addr_log2 = readb(card->csr_remap + ERROR_ADDR_LOG + 4);
  496. count = readb(card->csr_remap + ERROR_COUNT);
  497. syndrome = readb(card->csr_remap + ERROR_SYNDROME);
  498. check = readb(card->csr_remap + ERROR_CHECK);
  499. dump_dmastat(card, dma_status);
  500. if (stat & 0x01)
  501. printk(KERN_ERR "MM%d*: Memory access error detected (err count %d)n",
  502. card->card_number, count);
  503. if (stat & 0x02)
  504. printk(KERN_ERR "MM%d*: Multi-bit EDC errorn",
  505. card->card_number);
  506. printk(KERN_ERR "MM%d*: Fault Address 0x%02x%08x, Fault Data 0x%08x%08xn",
  507. card->card_number, addr_log2, addr_log1, data_log2, data_log1);
  508. printk(KERN_ERR "MM%d*: Fault Check 0x%02x, Fault Syndrome 0x%02xn",
  509. card->card_number, check, syndrome);
  510. writeb(0, card->csr_remap + ERROR_COUNT);
  511. }
  512. if (dma_status & DMASCR_PARITY_ERR_REP) {
  513. printk(KERN_ERR "MM%d*: PARITY ERROR REPORTEDn", card->card_number);
  514. pci_read_config_word(card->dev, PCI_STATUS, &cfg_status);
  515. pci_write_config_word(card->dev, PCI_STATUS, cfg_status);
  516. }
  517. if (dma_status & DMASCR_PARITY_ERR_DET) {
  518. printk(KERN_ERR "MM%d*: PARITY ERROR DETECTEDn", card->card_number); 
  519. pci_read_config_word(card->dev, PCI_STATUS, &cfg_status);
  520. pci_write_config_word(card->dev, PCI_STATUS, cfg_status);
  521. }
  522. if (dma_status & DMASCR_SYSTEM_ERR_SIG) {
  523. printk(KERN_ERR "MM%d*: SYSTEM ERRORn", card->card_number); 
  524. pci_read_config_word(card->dev, PCI_STATUS, &cfg_status);
  525. pci_write_config_word(card->dev, PCI_STATUS, cfg_status);
  526. }
  527. if (dma_status & DMASCR_TARGET_ABT) {
  528. printk(KERN_ERR "MM%d*: TARGET ABORTn", card->card_number); 
  529. pci_read_config_word(card->dev, PCI_STATUS, &cfg_status);
  530. pci_write_config_word(card->dev, PCI_STATUS, cfg_status);
  531. }
  532. if (dma_status & DMASCR_MASTER_ABT) {
  533. printk(KERN_ERR "MM%d*: MASTER ABORTn", card->card_number); 
  534. pci_read_config_word(card->dev, PCI_STATUS, &cfg_status);
  535. pci_write_config_word(card->dev, PCI_STATUS, cfg_status);
  536. }
  537. /* and process the DMA descriptors */
  538. card->dma_status = dma_status;
  539. tasklet_schedule(&card->tasklet);
  540. HW_TRACE(0x36);
  541. }
  542. /*
  543. -----------------------------------------------------------------------------------
  544. --                         set_fault_to_battery_status
  545. -----------------------------------------------------------------------------------
  546. */
  547. /*
  548.  * If both batteries are good, no LED
  549.  * If either battery has been warned, solid LED
  550.  * If both batteries are bad, flash the LED quickly
  551.  * If either battery is bad, flash the LED semi quickly
  552.  */
  553. static void set_fault_to_battery_status(struct cardinfo *card)
  554. {
  555. if (card->battery[0].good && card->battery[1].good)
  556. set_led(card, LED_FAULT, LED_OFF);
  557. else if (card->battery[0].warned || card->battery[1].warned)
  558. set_led(card, LED_FAULT, LED_ON);
  559. else if (!card->battery[0].good && !card->battery[1].good)
  560. set_led(card, LED_FAULT, LED_FLASH_7_0);
  561. else
  562. set_led(card, LED_FAULT, LED_FLASH_3_5);
  563. }
  564. static void init_battery_timer(void);
  565. /*
  566. -----------------------------------------------------------------------------------
  567. --                            check_battery
  568. -----------------------------------------------------------------------------------
  569. */
  570. static int check_battery(struct cardinfo *card, int battery, int status)
  571. {
  572. if (status != card->battery[battery].good) {
  573. card->battery[battery].good = !card->battery[battery].good;
  574. card->battery[battery].last_change = jiffies;
  575. if (card->battery[battery].good) {
  576. printk(KERN_ERR "MM%d: Battery %d now goodn",
  577. card->card_number, battery + 1);
  578. card->battery[battery].warned = 0;
  579. } else
  580. printk(KERN_ERR "MM%d: Battery %d now FAILEDn",
  581. card->card_number, battery + 1);
  582. return 1;
  583. } else if (!card->battery[battery].good &&
  584.    !card->battery[battery].warned &&
  585.    time_after_eq(jiffies, card->battery[battery].last_change +
  586.  (HZ * 60 * 60 * 5))) {
  587. printk(KERN_ERR "MM%d: Battery %d still FAILED after 5 hoursn",
  588. card->card_number, battery + 1);
  589. card->battery[battery].warned = 1;
  590. return 1;
  591. }
  592. return 0;
  593. }
  594. /*
  595. -----------------------------------------------------------------------------------
  596. --                              check_batteries
  597. -----------------------------------------------------------------------------------
  598. */
  599. static void check_batteries(struct cardinfo *card)
  600. {
  601. /* NOTE: this must *never* be called while the card
  602.  * is doing (bus-to-card) DMA, or you will need the
  603.  * reset switch
  604.  */
  605. unsigned char status;
  606. int ret1, ret2;
  607. status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY);
  608. if (debug & DEBUG_BATTERY_POLLING)
  609. printk(KERN_DEBUG "MM%d: checking battery status, 1 = %s, 2 = %sn",
  610.        card->card_number,
  611.        (status & BATTERY_1_FAILURE) ? "FAILURE" : "OK",
  612.        (status & BATTERY_2_FAILURE) ? "FAILURE" : "OK");
  613. ret1 = check_battery(card, 0, !(status & BATTERY_1_FAILURE));
  614. ret2 = check_battery(card, 1, !(status & BATTERY_2_FAILURE));
  615. if (ret1 || ret2)
  616. set_fault_to_battery_status(card);
  617. }
  618. static void check_all_batteries(unsigned long ptr)
  619. {
  620. int i;
  621. for (i = 0; i < num_cards; i++) {
  622. struct cardinfo *card = &cards[i];
  623. spin_lock_bh(&card->lock);
  624. if (card->Active >= 0)
  625. card->check_batteries = 1;
  626. else
  627. check_batteries(card);
  628. spin_unlock_bh(&card->lock);
  629. }
  630. init_battery_timer();
  631. }
  632. /*
  633. -----------------------------------------------------------------------------------
  634. --                            init_battery_timer
  635. -----------------------------------------------------------------------------------
  636. */
  637. static void init_battery_timer(void)
  638. {
  639. init_timer(&battery_timer);
  640. battery_timer.function = check_all_batteries;
  641. battery_timer.expires = jiffies + (HZ * 60);
  642. add_timer(&battery_timer);
  643. }
  644. /*
  645. -----------------------------------------------------------------------------------
  646. --                              del_battery_timer
  647. -----------------------------------------------------------------------------------
  648. */
  649. static void del_battery_timer(void)
  650. {
  651. del_timer(&battery_timer);
  652. }
  653. /*
  654. -----------------------------------------------------------------------------------
  655. --                                mm_revalidate
  656. -----------------------------------------------------------------------------------
  657. */
  658. /*
  659.  * Note no locks taken out here.  In a worst case scenario, we could drop
  660.  * a chunk of system memory.  But that should never happen, since validation
  661.  * happens at open or mount time, when locks are held.
  662.  */
  663. static int mm_revalidate(kdev_t i_rdev)
  664. {
  665. int i;
  666. int card_number = DEVICE_NR(i_rdev);
  667. /* first partition, # of partitions */
  668. int part1 = (DEVICE_NR(i_rdev) << MM_SHIFT) + 1;
  669. int npart = (1 << MM_SHIFT) -1;
  670. /* first clear old partition information */
  671. for (i=0; i<npart ;i++) {
  672. mm_gendisk.sizes[part1+i]=0;
  673. mm_gendisk.part[part1+i].start_sect = 0;
  674. mm_gendisk.part[part1+i].nr_sects = 0;
  675. }
  676. mm_gendisk.part[card_number << MM_SHIFT].nr_sects =
  677. cards[card_number].mm_size << 1;
  678. /* then fill new info */
  679. printk(KERN_INFO "mm partition check: (%d)n", DEVICE_NR(i_rdev));
  680. grok_partitions(&mm_gendisk, card_number,  1<<MM_SHIFT,
  681. mm_gendisk.sizes[card_number<<MM_SHIFT]);
  682. return 0;
  683. }
  684. /*
  685. -----------------------------------------------------------------------------------
  686. --                            mm_ioctl
  687. -----------------------------------------------------------------------------------
  688. */
  689. static int mm_ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg)
  690. {
  691. int err, size, card_number;
  692. struct hd_geometry geo;
  693. unsigned int minor;
  694. if (!i || !i->i_rdev)
  695. return -EINVAL;
  696. minor       = MINOR(i->i_rdev);
  697. card_number = (minor >> MM_SHIFT);
  698. switch(cmd) {
  699. case BLKGETSIZE:
  700. /* Return the device size, expressed in sectors */
  701. err = ! access_ok (VERIFY_WRITE, arg, sizeof(long));
  702. if (err) return -EFAULT;
  703. size = mm_gendisk.part[minor].nr_sects;
  704. if (copy_to_user((long *) arg, &size, sizeof (long)))
  705. return -EFAULT;
  706. return 0;
  707. case BLKRAGET: /* return the readahead value */
  708. err = ! access_ok(VERIFY_WRITE, arg, sizeof(long));
  709. if (err) return -EFAULT;
  710. copy_to_user((long *)arg, &read_ahead[MAJOR(i->i_rdev)],sizeof(long));
  711. return 0;
  712. case BLKRASET: /* set the readahead value */
  713. if (!capable(CAP_SYS_RAWIO)) return -EACCES;
  714. if (arg > 0xff) return -EINVAL; /* limit it */
  715. read_ahead[MAJOR(i->i_rdev)] = arg;
  716. return 0;
  717. case BLKRRPART:
  718. return (mm_revalidate(i->i_rdev));
  719. case HDIO_GETGEO:
  720. /*
  721.  * get geometry: we have to fake one...  trim the size to a
  722.  * multiple of 2048 (1M): tell we have 32 sectors, 64 heads,
  723.  * whatever cylinders.
  724.  */
  725. err = ! access_ok(VERIFY_WRITE, arg, sizeof(geo));
  726. if (err) return -EFAULT;
  727. size = cards[card_number].mm_size * (1024 / MM_HARDSECT);
  728. geo.heads     = 64;
  729. geo.sectors   = 32;
  730. geo.start     = mm_gendisk.part[minor].start_sect;
  731. geo.cylinders = size / (geo.heads * geo.sectors);
  732. if (copy_to_user((void *) arg, &geo, sizeof(geo)))
  733. return -EFAULT;
  734. return 0;
  735. default:
  736. return blk_ioctl(i->i_rdev, cmd, arg);
  737. }
  738. return -ENOTTY; /* unknown command */
  739. }
  740. /*
  741. -----------------------------------------------------------------------------------
  742. --                                mm_check_change
  743. -----------------------------------------------------------------------------------
  744.   Future support for removable devices
  745. */
  746. static int mm_check_change(kdev_t i_rdev)
  747. {
  748. int card_number = DEVICE_NR(i_rdev);
  749. /*  struct cardinfo *dev = cards + card_number; */
  750. if (card_number >= num_cards) /* paranoid */
  751. return 0;
  752. return 0;
  753. }
  754. /*
  755. -----------------------------------------------------------------------------------
  756. --                            mm_open
  757. -----------------------------------------------------------------------------------
  758. */
  759. static int mm_open(struct inode *i, struct file *filp)
  760. {
  761. int num;
  762. struct cardinfo *card;
  763. num = DEVICE_NR(i->i_rdev);
  764. if (num >= num_cards)
  765. return -ENXIO;
  766. card = cards + num;
  767. atomic_inc(&card->usage);
  768. MOD_INC_USE_COUNT;
  769. return 0;
  770. }
  771. /*
  772. -----------------------------------------------------------------------------------
  773. --                              mm_do_release
  774. -----------------------------------------------------------------------------------
  775. */
  776. static int mm_do_release(struct inode *i, struct file *filp)
  777. {
  778. int num;
  779. struct cardinfo *card;
  780. num = DEVICE_NR(i->i_rdev);
  781. card = cards + num;
  782. if (atomic_dec_and_test(&card->usage))
  783. invalidate_device(i->i_rdev, 1);
  784. MOD_DEC_USE_COUNT;
  785. return 0;
  786. }
  787. #define INITIALIZE_BHS 32
  788. /*
  789. -----------------------------------------------------------------------------------
  790. --                               mm_init_mem
  791. -----------------------------------------------------------------------------------
  792. */
  793. static void mm_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
  794. {
  795. mark_buffer_uptodate(bh, uptodate);
  796. unlock_buffer(bh);
  797. }
  798.  
  799. static int __devinit mm_init_mem(struct cardinfo *card)
  800. {
  801. struct buffer_head *bhlist, *bhactive, *bh;
  802. unsigned int i;
  803. int rc = 0;
  804. struct page *zero_page;
  805. /* Turn this off when we flush the contents of memory and have */
  806. /*  the card rebuild ECC */
  807. writeb(EDC_NONE_DEFAULT, card->csr_remap + MEMCTRLCMD_ERRCTRL);
  808. printk("MM%d: initializing memoryn", card->card_number);
  809. zero_page = alloc_page(GFP_KERNEL);
  810. if (!zero_page) {
  811. printk(KERN_ERR "unable to allocate page for zeroing memoryn");
  812. rc = -ENOMEM;
  813. goto out_alloc_zero_page;
  814. }
  815. memset(page_address(zero_page), 0, PAGE_SIZE);
  816. i=0; bhlist = NULL;
  817. while (i < INITIALIZE_BHS) {
  818. bh = kmem_cache_alloc(bh_cachep, SLAB_KERNEL);
  819. if (bh == NULL)
  820. break;
  821. bh->b_next = bhlist;
  822. bhlist = bh;
  823. bh->b_size = PAGE_SIZE;
  824. init_buffer(bh, mm_end_buffer_io_sync, NULL);
  825. set_bh_page(bh, zero_page, 0);
  826. bh->b_dev = bh->b_rdev =
  827. MKDEV(MAJOR_NR, card->card_number<<MM_SHIFT);
  828. init_waitqueue_head(&bh->b_wait);
  829. i++;
  830. }
  831. if (bhlist == NULL) {
  832. printk(KERN_ERR "MM: count not allocate buffer heads!!n");
  833. rc = -ENOMEM;
  834. goto out_alloc_bh;
  835. }
  836. bhactive = NULL;
  837. for (i = 0; i < card->mm_size / (PAGE_SIZE / 1024);i++) {
  838. if (bhlist == NULL) {
  839. /* time to wait for some buffers */
  840. while (bhactive) {
  841. bh = bhactive;
  842. bhactive = bh->b_next;
  843. wait_on_buffer(bh);
  844. if (!test_bit(BH_Uptodate, &bh->b_state))
  845. rc = -EIO;
  846. bh->b_next = bhlist;
  847. bhlist = bh;
  848. }
  849. }
  850. bh = bhlist;
  851. bhlist = bh->b_next;
  852. bh->b_blocknr = i;
  853. bh->b_rsector = i*(PAGE_SIZE/512);
  854. set_bit(BH_Lock, &bh->b_state);
  855. clear_bit(BH_Uptodate, &bh->b_state);
  856. mm_make_request(NULL, WRITE, bh);
  857. bh->b_next = bhactive;
  858. bhactive = bh;
  859. }
  860. while (bhactive) {
  861. bh = bhactive;
  862. bhactive = bh->b_next;
  863. wait_on_buffer(bh);
  864. bh->b_next = bhlist;
  865. bhlist = bh;
  866. }
  867. if (!rc)
  868. set_userbit(card, MEMORY_INITIALIZED, 1);
  869. while (bhlist) {
  870. bh = bhlist;
  871. bhlist = bh->b_next;
  872. kmem_cache_free(bh_cachep, bh);
  873. }
  874. out_alloc_bh:
  875. free_page((unsigned long) zero_page);
  876. out_alloc_zero_page:
  877. return rc;
  878. }
  879. /*
  880. -----------------------------------------------------------------------------------
  881. --                             mm_fops
  882. -----------------------------------------------------------------------------------
  883. */
  884. static struct block_device_operations mm_fops = {
  885. owner: THIS_MODULE,
  886. open: mm_open,
  887. release: mm_do_release,
  888. ioctl: mm_ioctl,
  889. revalidate: mm_revalidate,
  890. check_media_change: mm_check_change,
  891. };
  892. /*
  893. -----------------------------------------------------------------------------------
  894. --                                mm_pci_probe
  895. -----------------------------------------------------------------------------------
  896. */
  897. static int __devinit mm_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
  898. {
  899. int ret = -ENODEV;
  900. struct cardinfo *card = &cards[num_cards];
  901. unsigned char mem_present;
  902. unsigned char batt_status;
  903. unsigned int saved_bar, data;
  904. if (pci_enable_device(dev) < 0)
  905. return -ENODEV;
  906. pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0xF8);
  907. pci_set_master(dev);
  908. card->dev         = dev;
  909. card->card_number = num_cards;
  910. card->csr_base = pci_resource_start(dev, 0);
  911. card->csr_len  = pci_resource_len(dev, 0);
  912. #ifdef CONFIG_MM_MAP_MEMORY
  913. card->mem_base = pci_resource_start(dev, 1);
  914. card->mem_len  = pci_resource_len(dev, 1);
  915. #endif
  916. printk(KERN_INFO "Micro Memory(tm) controller #%d found at %02x:%02x (PCI Mem Module (Battery Backup))n",
  917.        card->card_number, dev->bus->number, dev->devfn);
  918. if (pci_set_dma_mask(dev, 0xffffffffffffffffLL) &&
  919.     !pci_set_dma_mask(dev, 0xffffffffLL)) {
  920. printk(KERN_WARNING "MM%d: NO suitable DMA foundn",num_cards);
  921. return  -ENOMEM;
  922. }
  923. if (!request_mem_region(card->csr_base, card->csr_len, "Micro Memory")) {
  924. printk(KERN_ERR "MM%d: Unable to request memory regionn", card->card_number);
  925. ret = -ENOMEM;
  926. goto failed_req_csr;
  927. }
  928. card->csr_remap = ioremap_nocache(card->csr_base, card->csr_len);
  929. if (!card->csr_remap) {
  930. printk(KERN_ERR "MM%d: Unable to remap memory regionn", card->card_number);
  931. ret = -ENOMEM;
  932. goto failed_remap_csr;
  933. }
  934. printk(KERN_INFO "MM%d: CSR 0x%08lx -> 0x%p (0x%lx)n", card->card_number,
  935.        card->csr_base, card->csr_remap, card->csr_len);
  936. #ifdef CONFIG_MM_MAP_MEMORY
  937. if (!request_mem_region(card->mem_base, card->mem_len, "Micro Memory")) {
  938. printk(KERN_ERR "MM%d: Unable to request memory regionn", card->card_number);
  939. ret = -ENOMEM;
  940. goto failed_req_mem;
  941. }
  942. if (!(card->mem_remap = (unsigned char *)ioremap(card->mem_base, cards->mem_len))) {
  943. printk(KERN_ERR "MM%d: Unable to remap memory regionn", card->card_number);
  944. ret = -ENOMEM;
  945. goto failed_remap_mem;
  946. }
  947. printk(KERN_INFO "MM%d: MEM 0x%8lx -> 0x%8lx (0x%lx)n", card->card_number,
  948.        card->mem_base, card->mem_remap, card->mem_len);
  949. #else
  950. printk(KERN_INFO "MM%d: MEM area not remapped (CONFIG_MM_MAP_MEMORY not set)n",
  951.        card->card_number);
  952. #endif
  953. if (readb(card->csr_remap + MEMCTRLSTATUS_MAGIC) != MM_MAGIC_VALUE) {
  954. printk(KERN_ERR "MM%d: Magic number invalidn", card->card_number);
  955. ret = -ENOMEM;
  956. goto failed_magic;
  957. }
  958. card->mm_pages[0].desc = pci_alloc_consistent(card->dev,
  959.       PAGE_SIZE*2,
  960.       &card->mm_pages[0].page_dma);
  961. card->mm_pages[1].desc = pci_alloc_consistent(card->dev,
  962.       PAGE_SIZE*2,
  963.       &card->mm_pages[1].page_dma);
  964. if (card->mm_pages[0].desc == NULL ||
  965.     card->mm_pages[1].desc == NULL) {
  966. printk(KERN_ERR "MM%d: alloc failedn", card->card_number);
  967. goto failed_alloc;
  968. }
  969. reset_page(&card->mm_pages[0]);
  970. reset_page(&card->mm_pages[1]);
  971. card->Ready = 0; /* page 0 is ready */
  972. card->Active = -1; /* no page is active */
  973. card->bh = NULL;
  974. card->bhtail = &card->bh;
  975. tasklet_init(&card->tasklet, process_page, (unsigned long)card);
  976. card->plug_tq.sync = 0;
  977. card->plug_tq.routine = &mm_unplug_device;
  978. card->plug_tq.data = card;
  979. card->check_batteries = 0;
  980. mem_present = readb(card->csr_remap + MEMCTRLSTATUS_MEMORY);
  981. switch (mem_present) {
  982. case MEM_128_MB:
  983. card->mm_size = 1024 * 128;
  984. break;
  985. case MEM_256_MB:
  986. card->mm_size = 1024 * 256;
  987. break;
  988. case MEM_512_MB:
  989. card->mm_size = 1024 * 512;
  990. break;
  991. case MEM_1_GB:
  992. card->mm_size = 1024 * 1024;
  993. break;
  994. case MEM_2_GB:
  995. card->mm_size = 1024 * 2048;
  996. break;
  997. default:
  998. card->mm_size = 0;
  999. break;
  1000. }
  1001. /* Clear the LED's we control */
  1002. set_led(card, LED_REMOVE, LED_OFF);
  1003. set_led(card, LED_FAULT, LED_OFF);
  1004. batt_status = readb(card->csr_remap + MEMCTRLSTATUS_BATTERY);
  1005. card->battery[0].good = !(batt_status & BATTERY_1_FAILURE);
  1006. card->battery[1].good = !(batt_status & BATTERY_2_FAILURE);
  1007. card->battery[0].last_change = card->battery[1].last_change = jiffies;
  1008. printk(KERN_INFO "MM%d: Size %d KB, Battery 1 %s (%s), Battery 2 %s (%s)n",
  1009.        card->card_number, card->mm_size,
  1010.        (batt_status & BATTERY_1_DISABLED ? "Disabled" : "Enabled"),
  1011.        card->battery[0].good ? "OK" : "FAILURE",
  1012.        (batt_status & BATTERY_2_DISABLED ? "Disabled" : "Enabled"),
  1013.        card->battery[1].good ? "OK" : "FAILURE");
  1014. set_fault_to_battery_status(card);
  1015. pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &saved_bar);
  1016. data = 0xffffffff;
  1017. pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, data);
  1018. pci_read_config_dword(dev, PCI_BASE_ADDRESS_1, &data);
  1019. pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, saved_bar);
  1020. data &= 0xfffffff0;
  1021. data = ~data;
  1022. data += 1;
  1023. card->win_size = data;
  1024. if (request_irq(dev->irq, mm_interrupt, SA_SHIRQ, "pci-umem", card)) {
  1025. printk(KERN_ERR "MM%d: Unable to allocate IRQn", card->card_number);
  1026. ret = -ENODEV;
  1027. goto failed_req_irq;
  1028. }
  1029. card->irq = dev->irq;
  1030. printk(KERN_INFO "MM%d: Window size %d bytes, IRQ %dn", card->card_number,
  1031.        card->win_size, card->irq);
  1032.         spin_lock_init(&card->lock);
  1033. dev->driver_data = card;
  1034. if (pci_write_cmd != 0x0F)  /* If not Memory Write & Invalidate */
  1035. pci_write_cmd = 0x07; /* then Memory Write command */
  1036. if (pci_write_cmd & 0x08) { /* use Memory Write and Invalidate */
  1037. unsigned short cfg_command;
  1038. pci_read_config_word(dev, PCI_COMMAND, &cfg_command);
  1039. cfg_command |= 0x10; /* Memory Write & Invalidate Enable */
  1040. pci_write_config_word(dev, PCI_COMMAND, cfg_command);
  1041. }
  1042. pci_cmds = (pci_read_cmd << 28) | (pci_write_cmd << 24);
  1043. num_cards++;
  1044. if (init_mem)
  1045. mm_init_mem(card);
  1046. else {
  1047. if (!get_userbit(card, MEMORY_INITIALIZED))
  1048. printk(KERN_INFO "MM%d: memory NOT initialized. perhaps load with init_mem=1?n", card->card_number);
  1049. else
  1050. printk(KERN_INFO "MM%d: memory already initializedn", card->card_number);
  1051. }
  1052. /* Enable ECC */
  1053. writeb(EDC_STORE_CORRECT, card->csr_remap + MEMCTRLCMD_ERRCTRL);
  1054. return 0;
  1055.  failed_req_irq:
  1056.  failed_alloc:
  1057. if (card->mm_pages[0].desc)
  1058. pci_free_consistent(card->dev, PAGE_SIZE*2,
  1059.     card->mm_pages[0].desc,
  1060.     card->mm_pages[0].page_dma);
  1061. if (card->mm_pages[1].desc)
  1062. pci_free_consistent(card->dev, PAGE_SIZE*2,
  1063.     card->mm_pages[1].desc,
  1064.     card->mm_pages[1].page_dma);
  1065.  failed_magic:
  1066. #ifdef CONFIG_MM_MAP_MEMORY
  1067. iounmap((void *) card->mem_remap);
  1068.  failed_remap_mem:
  1069. release_mem_region(card->mem_base, card->mem_len);
  1070.  failed_req_mem:
  1071. #endif
  1072. iounmap((void *) card->csr_base);
  1073.  failed_remap_csr:
  1074. release_mem_region(card->csr_base, card->csr_len);
  1075.  failed_req_csr:
  1076. return ret;
  1077. }
  1078. /*
  1079. -----------------------------------------------------------------------------------
  1080. --                              mm_pci_remove
  1081. -----------------------------------------------------------------------------------
  1082. */
  1083. static void mm_pci_remove(struct pci_dev *dev)
  1084. {
  1085. struct cardinfo *card = dev->driver_data;
  1086. tasklet_kill(&card->tasklet);
  1087. iounmap(card->csr_remap);
  1088. release_mem_region(card->csr_base, card->csr_len);
  1089. #ifdef CONFIG_MM_MAP_MEMORY
  1090. iounmap(card->mem_remap);
  1091. release_mem_region(card->mem_base, card->mem_len);
  1092. #endif
  1093. free_irq(card->irq, card);
  1094. if (card->mm_pages[0].desc)
  1095. pci_free_consistent(card->dev, PAGE_SIZE*2,
  1096.     card->mm_pages[0].desc,
  1097.     card->mm_pages[0].page_dma);
  1098. if (card->mm_pages[1].desc)
  1099. pci_free_consistent(card->dev, PAGE_SIZE*2,
  1100.     card->mm_pages[1].desc,
  1101.     card->mm_pages[1].page_dma);
  1102. }
  1103. static const struct pci_device_id __devinitdata mm_pci_ids[] = { {
  1104. vendor: PCI_VENDOR_ID_MICRO_MEMORY,
  1105. device: PCI_DEVICE_ID_MICRO_MEMORY_5415CN,
  1106. }, { /* end: all zeroes */ }
  1107. };
  1108. MODULE_DEVICE_TABLE(pci, mm_pci_ids);
  1109. static struct pci_driver mm_pci_driver = {
  1110. name: "umem",
  1111. id_table: mm_pci_ids,
  1112. probe: mm_pci_probe,
  1113. remove: mm_pci_remove,
  1114. };
  1115. /*
  1116. -----------------------------------------------------------------------------------
  1117. --                               mm_init
  1118. -----------------------------------------------------------------------------------
  1119. */
  1120. int __init mm_init(void)
  1121. {
  1122. int retval, i;
  1123. int err;
  1124. printk(KERN_INFO DRIVER_VERSION " : " DRIVER_DESC "n");
  1125. memset (cards,    0, MM_MAXCARDS * sizeof(struct cardinfo));
  1126. memset (mm_sizes, 0, (MM_MAXCARDS << MM_SHIFT) * sizeof (int));
  1127. memset (mm_partitions, 0,
  1128. (MM_MAXCARDS << MM_SHIFT) * sizeof(struct hd_struct));
  1129. retval = pci_module_init(&mm_pci_driver);
  1130. if (retval)
  1131. return -ENOMEM;
  1132. err = devfs_register_blkdev(MAJOR_NR, "umem", &mm_fops);
  1133. if (err < 0) {
  1134. printk(KERN_ERR "MM: Could not register block devicen");
  1135. return -EIO;
  1136. }
  1137. devfs_handle = devfs_mk_dir(NULL, "umem", NULL);
  1138. read_ahead[MAJOR_NR] = MM_RAHEAD;
  1139. /* Initialize partition size: partion 0 of each card is the entire card */
  1140. for (i = 0; i < num_cards; i++) {
  1141. mm_sizes[i << MM_SHIFT] = cards[i].mm_size;
  1142. }
  1143.         mm_gendisk.sizes = mm_sizes;
  1144. for (i = 0; i < num_cards; i++) {
  1145. spin_lock_init(&cards[i].lock);
  1146. mm_partitions[i << MM_SHIFT].nr_sects =
  1147. cards[i].mm_size * (1024 / MM_HARDSECT);
  1148. }
  1149. mm_gendisk.part      = mm_partitions;
  1150. mm_gendisk.nr_real   = num_cards;
  1151. add_gendisk(&mm_gendisk);
  1152. blk_queue_make_request(BLK_DEFAULT_QUEUE(MAJOR_NR),
  1153.        mm_make_request);
  1154. for (i = 0; i < num_cards << MM_SHIFT; i++) {
  1155. mm_hardsect[i]   = MM_HARDSECT;
  1156. mm_blocksizes[i] = MM_BLKSIZE;
  1157. }
  1158. hardsect_size[MAJOR_NR] = mm_hardsect;
  1159. blksize_size[MAJOR_NR]  = mm_blocksizes;
  1160.         blk_size[MAJOR_NR]      = mm_gendisk.sizes;
  1161.         for (i = 0; i < num_cards; i++) {
  1162. register_disk(&mm_gendisk, MKDEV(MAJOR_NR, i<<MM_SHIFT), MM_SHIFT,
  1163.       &mm_fops, cards[i].mm_size << 1);
  1164. }
  1165. init_battery_timer();
  1166. printk("MM: desc_per_page = %ldn", DESC_PER_PAGE);
  1167. /* printk("mm_init: Done. 10-19-01 9:00n"); */
  1168. return 0;
  1169. }
  1170. /*
  1171. -----------------------------------------------------------------------------------
  1172. --                             mm_cleanup
  1173. -----------------------------------------------------------------------------------
  1174. */
  1175. void __exit mm_cleanup(void)
  1176. {
  1177. int i;
  1178. del_battery_timer();
  1179. for (i=0; i < num_cards ; i++)
  1180. devfs_register_partitions(&mm_gendisk, i<<MM_SHIFT, 1);
  1181. if (devfs_handle)
  1182. devfs_unregister(devfs_handle);
  1183. devfs_handle = NULL;
  1184. pci_unregister_driver(&mm_pci_driver);
  1185. devfs_unregister_blkdev(MAJOR_NR, "umem");
  1186.         for (i = 0; i < (num_cards << MM_SHIFT); i++)
  1187. invalidate_device (MKDEV(MAJOR_NR,i), 1);
  1188. hardsect_size[MAJOR_NR] = NULL;
  1189. blksize_size [MAJOR_NR] = NULL;
  1190. blk_size     [MAJOR_NR] = NULL;
  1191.         read_ahead   [MAJOR_NR] = 0;
  1192. /*
  1193.  * Get our gendisk structure off the list.
  1194.  */
  1195. del_gendisk(&mm_gendisk);
  1196. }
  1197. module_init(mm_init);
  1198. module_exit(mm_cleanup);
  1199. MODULE_AUTHOR(DRIVER_AUTHOR);
  1200. MODULE_DESCRIPTION(DRIVER_DESC);
  1201. MODULE_LICENSE("GPL");