yenta_socket.c 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394
  1. /*
  2. * Regular cardbus driver ("yenta_socket")
  3. *
  4. * (C) Copyright 1999, 2000 Linus Torvalds
  5. *
  6. * Changelog:
  7. * Aug 2002: Manfred Spraul <manfred@colorfullife.com>
  8. * Dynamically adjust the size of the bridge resource
  9. *
  10. * May 2003: Dominik Brodowski <linux@brodo.de>
  11. * Merge pci_socket.c and yenta.c into one file
  12. */
  13. #include <linux/init.h>
  14. #include <linux/pci.h>
  15. #include <linux/sched.h>
  16. #include <linux/workqueue.h>
  17. #include <linux/interrupt.h>
  18. #include <linux/delay.h>
  19. #include <linux/module.h>
  20. #include <pcmcia/cs_types.h>
  21. #include <pcmcia/ss.h>
  22. #include <pcmcia/cs.h>
  23. #include <asm/io.h>
  24. #include "yenta_socket.h"
  25. #include "i82365.h"
  26. static int disable_clkrun;
  27. module_param(disable_clkrun, bool, 0444);
  28. MODULE_PARM_DESC(disable_clkrun, "If PC card doesn't function properly, please try this option");
  29. static int isa_probe = 1;
  30. module_param(isa_probe, bool, 0444);
  31. MODULE_PARM_DESC(isa_probe, "If set ISA interrupts are probed (default). Set to N to disable probing");
  32. static int pwr_irqs_off;
  33. module_param(pwr_irqs_off, bool, 0644);
  34. MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use only when seeing IRQ storms!");
  35. #if 0
  36. #define debug(x,args...) printk(KERN_DEBUG "%s: " x, __func__ , ##args)
  37. #else
  38. #define debug(x,args...)
  39. #endif
  40. /* Don't ask.. */
  41. #define to_cycles(ns) ((ns)/120)
  42. #define to_ns(cycles) ((cycles)*120)
  43. /**
  44. * yenta PCI irq probing.
  45. * currently only used in the TI/EnE initialization code
  46. */
  47. #ifdef CONFIG_YENTA_TI
  48. static int yenta_probe_cb_irq(struct yenta_socket *socket);
  49. #endif
  50. static unsigned int override_bios;
  51. module_param(override_bios, uint, 0000);
  52. MODULE_PARM_DESC (override_bios, "yenta ignore bios resource allocation");
  53. /*
  54. * Generate easy-to-use ways of reading a cardbus sockets
  55. * regular memory space ("cb_xxx"), configuration space
  56. * ("config_xxx") and compatibility space ("exca_xxxx")
  57. */
  58. static inline u32 cb_readl(struct yenta_socket *socket, unsigned reg)
  59. {
  60. u32 val = readl(socket->base + reg);
  61. debug("%p %04x %08x\n", socket, reg, val);
  62. return val;
  63. }
  64. static inline void cb_writel(struct yenta_socket *socket, unsigned reg, u32 val)
  65. {
  66. debug("%p %04x %08x\n", socket, reg, val);
  67. writel(val, socket->base + reg);
  68. readl(socket->base + reg); /* avoid problems with PCI write posting */
  69. }
  70. static inline u8 config_readb(struct yenta_socket *socket, unsigned offset)
  71. {
  72. u8 val;
  73. pci_read_config_byte(socket->dev, offset, &val);
  74. debug("%p %04x %02x\n", socket, offset, val);
  75. return val;
  76. }
  77. static inline u16 config_readw(struct yenta_socket *socket, unsigned offset)
  78. {
  79. u16 val;
  80. pci_read_config_word(socket->dev, offset, &val);
  81. debug("%p %04x %04x\n", socket, offset, val);
  82. return val;
  83. }
  84. static inline u32 config_readl(struct yenta_socket *socket, unsigned offset)
  85. {
  86. u32 val;
  87. pci_read_config_dword(socket->dev, offset, &val);
  88. debug("%p %04x %08x\n", socket, offset, val);
  89. return val;
  90. }
  91. static inline void config_writeb(struct yenta_socket *socket, unsigned offset, u8 val)
  92. {
  93. debug("%p %04x %02x\n", socket, offset, val);
  94. pci_write_config_byte(socket->dev, offset, val);
  95. }
  96. static inline void config_writew(struct yenta_socket *socket, unsigned offset, u16 val)
  97. {
  98. debug("%p %04x %04x\n", socket, offset, val);
  99. pci_write_config_word(socket->dev, offset, val);
  100. }
  101. static inline void config_writel(struct yenta_socket *socket, unsigned offset, u32 val)
  102. {
  103. debug("%p %04x %08x\n", socket, offset, val);
  104. pci_write_config_dword(socket->dev, offset, val);
  105. }
  106. static inline u8 exca_readb(struct yenta_socket *socket, unsigned reg)
  107. {
  108. u8 val = readb(socket->base + 0x800 + reg);
  109. debug("%p %04x %02x\n", socket, reg, val);
  110. return val;
  111. }
  112. static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg)
  113. {
  114. u16 val;
  115. val = readb(socket->base + 0x800 + reg);
  116. val |= readb(socket->base + 0x800 + reg + 1) << 8;
  117. debug("%p %04x %04x\n", socket, reg, val);
  118. return val;
  119. }
  120. static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val)
  121. {
  122. debug("%p %04x %02x\n", socket, reg, val);
  123. writeb(val, socket->base + 0x800 + reg);
  124. readb(socket->base + 0x800 + reg); /* PCI write posting... */
  125. }
  126. static void exca_writew(struct yenta_socket *socket, unsigned reg, u16 val)
  127. {
  128. debug("%p %04x %04x\n", socket, reg, val);
  129. writeb(val, socket->base + 0x800 + reg);
  130. writeb(val >> 8, socket->base + 0x800 + reg + 1);
  131. /* PCI write posting... */
  132. readb(socket->base + 0x800 + reg);
  133. readb(socket->base + 0x800 + reg + 1);
  134. }
  135. static ssize_t show_yenta_registers(struct device *yentadev, struct device_attribute *attr, char *buf)
  136. {
  137. struct pci_dev *dev = to_pci_dev(yentadev);
  138. struct yenta_socket *socket = pci_get_drvdata(dev);
  139. int offset = 0, i;
  140. offset = snprintf(buf, PAGE_SIZE, "CB registers:");
  141. for (i = 0; i < 0x24; i += 4) {
  142. unsigned val;
  143. if (!(i & 15))
  144. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
  145. val = cb_readl(socket, i);
  146. offset += snprintf(buf + offset, PAGE_SIZE - offset, " %08x", val);
  147. }
  148. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n\nExCA registers:");
  149. for (i = 0; i < 0x45; i++) {
  150. unsigned char val;
  151. if (!(i & 7)) {
  152. if (i & 8) {
  153. memcpy(buf + offset, " -", 2);
  154. offset += 2;
  155. } else
  156. offset += snprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i);
  157. }
  158. val = exca_readb(socket, i);
  159. offset += snprintf(buf + offset, PAGE_SIZE - offset, " %02x", val);
  160. }
  161. buf[offset++] = '\n';
  162. return offset;
  163. }
  164. static DEVICE_ATTR(yenta_registers, S_IRUSR, show_yenta_registers, NULL);
  165. /*
  166. * Ugh, mixed-mode cardbus and 16-bit pccard state: things depend
  167. * on what kind of card is inserted..
  168. */
  169. static int yenta_get_status(struct pcmcia_socket *sock, unsigned int *value)
  170. {
  171. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  172. unsigned int val;
  173. u32 state = cb_readl(socket, CB_SOCKET_STATE);
  174. val = (state & CB_3VCARD) ? SS_3VCARD : 0;
  175. val |= (state & CB_XVCARD) ? SS_XVCARD : 0;
  176. val |= (state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ? 0 : SS_PENDING;
  177. val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? SS_PENDING : 0;
  178. if (state & CB_CBCARD) {
  179. val |= SS_CARDBUS;
  180. val |= (state & CB_CARDSTS) ? SS_STSCHG : 0;
  181. val |= (state & (CB_CDETECT1 | CB_CDETECT2)) ? 0 : SS_DETECT;
  182. val |= (state & CB_PWRCYCLE) ? SS_POWERON | SS_READY : 0;
  183. } else if (state & CB_16BITCARD) {
  184. u8 status = exca_readb(socket, I365_STATUS);
  185. val |= ((status & I365_CS_DETECT) == I365_CS_DETECT) ? SS_DETECT : 0;
  186. if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
  187. val |= (status & I365_CS_STSCHG) ? 0 : SS_STSCHG;
  188. } else {
  189. val |= (status & I365_CS_BVD1) ? 0 : SS_BATDEAD;
  190. val |= (status & I365_CS_BVD2) ? 0 : SS_BATWARN;
  191. }
  192. val |= (status & I365_CS_WRPROT) ? SS_WRPROT : 0;
  193. val |= (status & I365_CS_READY) ? SS_READY : 0;
  194. val |= (status & I365_CS_POWERON) ? SS_POWERON : 0;
  195. }
  196. *value = val;
  197. return 0;
  198. }
  199. static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
  200. {
  201. /* some birdges require to use the ExCA registers to power 16bit cards */
  202. if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
  203. (socket->flags & YENTA_16BIT_POWER_EXCA)) {
  204. u8 reg, old;
  205. reg = old = exca_readb(socket, I365_POWER);
  206. reg &= ~(I365_VCC_MASK | I365_VPP1_MASK | I365_VPP2_MASK);
  207. /* i82365SL-DF style */
  208. if (socket->flags & YENTA_16BIT_POWER_DF) {
  209. switch (state->Vcc) {
  210. case 33: reg |= I365_VCC_3V; break;
  211. case 50: reg |= I365_VCC_5V; break;
  212. default: reg = 0; break;
  213. }
  214. switch (state->Vpp) {
  215. case 33:
  216. case 50: reg |= I365_VPP1_5V; break;
  217. case 120: reg |= I365_VPP1_12V; break;
  218. }
  219. } else {
  220. /* i82365SL-B style */
  221. switch (state->Vcc) {
  222. case 50: reg |= I365_VCC_5V; break;
  223. default: reg = 0; break;
  224. }
  225. switch (state->Vpp) {
  226. case 50: reg |= I365_VPP1_5V | I365_VPP2_5V; break;
  227. case 120: reg |= I365_VPP1_12V | I365_VPP2_12V; break;
  228. }
  229. }
  230. if (reg != old)
  231. exca_writeb(socket, I365_POWER, reg);
  232. } else {
  233. u32 reg = 0; /* CB_SC_STPCLK? */
  234. switch (state->Vcc) {
  235. case 33: reg = CB_SC_VCC_3V; break;
  236. case 50: reg = CB_SC_VCC_5V; break;
  237. default: reg = 0; break;
  238. }
  239. switch (state->Vpp) {
  240. case 33: reg |= CB_SC_VPP_3V; break;
  241. case 50: reg |= CB_SC_VPP_5V; break;
  242. case 120: reg |= CB_SC_VPP_12V; break;
  243. }
  244. if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
  245. cb_writel(socket, CB_SOCKET_CONTROL, reg);
  246. }
  247. }
  248. static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
  249. {
  250. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  251. u16 bridge;
  252. /* if powering down: do it immediately */
  253. if (state->Vcc == 0)
  254. yenta_set_power(socket, state);
  255. socket->io_irq = state->io_irq;
  256. bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
  257. if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
  258. u8 intr;
  259. bridge |= (state->flags & SS_RESET) ? CB_BRIDGE_CRST : 0;
  260. /* ISA interrupt control? */
  261. intr = exca_readb(socket, I365_INTCTL);
  262. intr = (intr & ~0xf);
  263. if (!socket->cb_irq) {
  264. intr |= state->io_irq;
  265. bridge |= CB_BRIDGE_INTR;
  266. }
  267. exca_writeb(socket, I365_INTCTL, intr);
  268. } else {
  269. u8 reg;
  270. reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA);
  271. reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET;
  272. reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0;
  273. if (state->io_irq != socket->cb_irq) {
  274. reg |= state->io_irq;
  275. bridge |= CB_BRIDGE_INTR;
  276. }
  277. exca_writeb(socket, I365_INTCTL, reg);
  278. reg = exca_readb(socket, I365_POWER) & (I365_VCC_MASK|I365_VPP1_MASK);
  279. reg |= I365_PWR_NORESET;
  280. if (state->flags & SS_PWR_AUTO) reg |= I365_PWR_AUTO;
  281. if (state->flags & SS_OUTPUT_ENA) reg |= I365_PWR_OUT;
  282. if (exca_readb(socket, I365_POWER) != reg)
  283. exca_writeb(socket, I365_POWER, reg);
  284. /* CSC interrupt: no ISA irq for CSC */
  285. reg = I365_CSC_DETECT;
  286. if (state->flags & SS_IOCARD) {
  287. if (state->csc_mask & SS_STSCHG) reg |= I365_CSC_STSCHG;
  288. } else {
  289. if (state->csc_mask & SS_BATDEAD) reg |= I365_CSC_BVD1;
  290. if (state->csc_mask & SS_BATWARN) reg |= I365_CSC_BVD2;
  291. if (state->csc_mask & SS_READY) reg |= I365_CSC_READY;
  292. }
  293. exca_writeb(socket, I365_CSCINT, reg);
  294. exca_readb(socket, I365_CSC);
  295. if(sock->zoom_video)
  296. sock->zoom_video(sock, state->flags & SS_ZVCARD);
  297. }
  298. config_writew(socket, CB_BRIDGE_CONTROL, bridge);
  299. /* Socket event mask: get card insert/remove events.. */
  300. cb_writel(socket, CB_SOCKET_EVENT, -1);
  301. cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
  302. /* if powering up: do it as the last step when the socket is configured */
  303. if (state->Vcc != 0)
  304. yenta_set_power(socket, state);
  305. return 0;
  306. }
  307. static int yenta_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *io)
  308. {
  309. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  310. int map;
  311. unsigned char ioctl, addr, enable;
  312. map = io->map;
  313. if (map > 1)
  314. return -EINVAL;
  315. enable = I365_ENA_IO(map);
  316. addr = exca_readb(socket, I365_ADDRWIN);
  317. /* Disable the window before changing it.. */
  318. if (addr & enable) {
  319. addr &= ~enable;
  320. exca_writeb(socket, I365_ADDRWIN, addr);
  321. }
  322. exca_writew(socket, I365_IO(map)+I365_W_START, io->start);
  323. exca_writew(socket, I365_IO(map)+I365_W_STOP, io->stop);
  324. ioctl = exca_readb(socket, I365_IOCTL) & ~I365_IOCTL_MASK(map);
  325. if (io->flags & MAP_0WS) ioctl |= I365_IOCTL_0WS(map);
  326. if (io->flags & MAP_16BIT) ioctl |= I365_IOCTL_16BIT(map);
  327. if (io->flags & MAP_AUTOSZ) ioctl |= I365_IOCTL_IOCS16(map);
  328. exca_writeb(socket, I365_IOCTL, ioctl);
  329. if (io->flags & MAP_ACTIVE)
  330. exca_writeb(socket, I365_ADDRWIN, addr | enable);
  331. return 0;
  332. }
  333. static int yenta_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *mem)
  334. {
  335. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  336. struct pci_bus_region region;
  337. int map;
  338. unsigned char addr, enable;
  339. unsigned int start, stop, card_start;
  340. unsigned short word;
  341. pcibios_resource_to_bus(socket->dev, &region, mem->res);
  342. map = mem->map;
  343. start = region.start;
  344. stop = region.end;
  345. card_start = mem->card_start;
  346. if (map > 4 || start > stop || ((start ^ stop) >> 24) ||
  347. (card_start >> 26) || mem->speed > 1000)
  348. return -EINVAL;
  349. enable = I365_ENA_MEM(map);
  350. addr = exca_readb(socket, I365_ADDRWIN);
  351. if (addr & enable) {
  352. addr &= ~enable;
  353. exca_writeb(socket, I365_ADDRWIN, addr);
  354. }
  355. exca_writeb(socket, CB_MEM_PAGE(map), start >> 24);
  356. word = (start >> 12) & 0x0fff;
  357. if (mem->flags & MAP_16BIT)
  358. word |= I365_MEM_16BIT;
  359. if (mem->flags & MAP_0WS)
  360. word |= I365_MEM_0WS;
  361. exca_writew(socket, I365_MEM(map) + I365_W_START, word);
  362. word = (stop >> 12) & 0x0fff;
  363. switch (to_cycles(mem->speed)) {
  364. case 0: break;
  365. case 1: word |= I365_MEM_WS0; break;
  366. case 2: word |= I365_MEM_WS1; break;
  367. default: word |= I365_MEM_WS1 | I365_MEM_WS0; break;
  368. }
  369. exca_writew(socket, I365_MEM(map) + I365_W_STOP, word);
  370. word = ((card_start - start) >> 12) & 0x3fff;
  371. if (mem->flags & MAP_WRPROT)
  372. word |= I365_MEM_WRPROT;
  373. if (mem->flags & MAP_ATTRIB)
  374. word |= I365_MEM_REG;
  375. exca_writew(socket, I365_MEM(map) + I365_W_OFF, word);
  376. if (mem->flags & MAP_ACTIVE)
  377. exca_writeb(socket, I365_ADDRWIN, addr | enable);
  378. return 0;
  379. }
  380. static irqreturn_t yenta_interrupt(int irq, void *dev_id)
  381. {
  382. unsigned int events;
  383. struct yenta_socket *socket = (struct yenta_socket *) dev_id;
  384. u8 csc;
  385. u32 cb_event;
  386. /* Clear interrupt status for the event */
  387. cb_event = cb_readl(socket, CB_SOCKET_EVENT);
  388. cb_writel(socket, CB_SOCKET_EVENT, cb_event);
  389. csc = exca_readb(socket, I365_CSC);
  390. if (!(cb_event || csc))
  391. return IRQ_NONE;
  392. events = (cb_event & (CB_CD1EVENT | CB_CD2EVENT)) ? SS_DETECT : 0 ;
  393. events |= (csc & I365_CSC_DETECT) ? SS_DETECT : 0;
  394. if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
  395. events |= (csc & I365_CSC_STSCHG) ? SS_STSCHG : 0;
  396. } else {
  397. events |= (csc & I365_CSC_BVD1) ? SS_BATDEAD : 0;
  398. events |= (csc & I365_CSC_BVD2) ? SS_BATWARN : 0;
  399. events |= (csc & I365_CSC_READY) ? SS_READY : 0;
  400. }
  401. if (events)
  402. pcmcia_parse_events(&socket->socket, events);
  403. return IRQ_HANDLED;
  404. }
  405. static void yenta_interrupt_wrapper(unsigned long data)
  406. {
  407. struct yenta_socket *socket = (struct yenta_socket *) data;
  408. yenta_interrupt(0, (void *)socket);
  409. socket->poll_timer.expires = jiffies + HZ;
  410. add_timer(&socket->poll_timer);
  411. }
  412. static void yenta_clear_maps(struct yenta_socket *socket)
  413. {
  414. int i;
  415. struct resource res = { .start = 0, .end = 0x0fff };
  416. pccard_io_map io = { 0, 0, 0, 0, 1 };
  417. pccard_mem_map mem = { .res = &res, };
  418. yenta_set_socket(&socket->socket, &dead_socket);
  419. for (i = 0; i < 2; i++) {
  420. io.map = i;
  421. yenta_set_io_map(&socket->socket, &io);
  422. }
  423. for (i = 0; i < 5; i++) {
  424. mem.map = i;
  425. yenta_set_mem_map(&socket->socket, &mem);
  426. }
  427. }
  428. /* redoes voltage interrogation if required */
  429. static void yenta_interrogate(struct yenta_socket *socket)
  430. {
  431. u32 state;
  432. state = cb_readl(socket, CB_SOCKET_STATE);
  433. if (!(state & (CB_5VCARD | CB_3VCARD | CB_XVCARD | CB_YVCARD)) ||
  434. (state & (CB_CDETECT1 | CB_CDETECT2 | CB_NOTACARD | CB_BADVCCREQ)) ||
  435. ((state & (CB_16BITCARD | CB_CBCARD)) == (CB_16BITCARD | CB_CBCARD)))
  436. cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
  437. }
  438. /* Called at resume and initialization events */
  439. static int yenta_sock_init(struct pcmcia_socket *sock)
  440. {
  441. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  442. exca_writeb(socket, I365_GBLCTL, 0x00);
  443. exca_writeb(socket, I365_GENCTL, 0x00);
  444. /* Redo card voltage interrogation */
  445. yenta_interrogate(socket);
  446. yenta_clear_maps(socket);
  447. if (socket->type && socket->type->sock_init)
  448. socket->type->sock_init(socket);
  449. /* Re-enable CSC interrupts */
  450. cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
  451. return 0;
  452. }
  453. static int yenta_sock_suspend(struct pcmcia_socket *sock)
  454. {
  455. struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
  456. /* Disable CSC interrupts */
  457. cb_writel(socket, CB_SOCKET_MASK, 0x0);
  458. return 0;
  459. }
  460. /*
  461. * Use an adaptive allocation for the memory resource,
  462. * sometimes the memory behind pci bridges is limited:
  463. * 1/8 of the size of the io window of the parent.
  464. * max 4 MB, min 16 kB. We try very hard to not get below
  465. * the "ACC" values, though.
  466. */
  467. #define BRIDGE_MEM_MAX 4*1024*1024
  468. #define BRIDGE_MEM_ACC 128*1024
  469. #define BRIDGE_MEM_MIN 16*1024
  470. #define BRIDGE_IO_MAX 512
  471. #define BRIDGE_IO_ACC 256
  472. #define BRIDGE_IO_MIN 32
  473. #ifndef PCIBIOS_MIN_CARDBUS_IO
  474. #define PCIBIOS_MIN_CARDBUS_IO PCIBIOS_MIN_IO
  475. #endif
  476. static int yenta_search_one_res(struct resource *root, struct resource *res,
  477. u32 min)
  478. {
  479. u32 align, size, start, end;
  480. if (res->flags & IORESOURCE_IO) {
  481. align = 1024;
  482. size = BRIDGE_IO_MAX;
  483. start = PCIBIOS_MIN_CARDBUS_IO;
  484. end = ~0U;
  485. } else {
  486. unsigned long avail = root->end - root->start;
  487. int i;
  488. size = BRIDGE_MEM_MAX;
  489. if (size > avail/8) {
  490. size=(avail+1)/8;
  491. /* round size down to next power of 2 */
  492. i = 0;
  493. while ((size /= 2) != 0)
  494. i++;
  495. size = 1 << i;
  496. }
  497. if (size < min)
  498. size = min;
  499. align = size;
  500. start = PCIBIOS_MIN_MEM;
  501. end = ~0U;
  502. }
  503. do {
  504. if (allocate_resource(root, res, size, start, end, align,
  505. NULL, NULL)==0) {
  506. return 1;
  507. }
  508. size = size/2;
  509. align = size;
  510. } while (size >= min);
  511. return 0;
  512. }
  513. static int yenta_search_res(struct yenta_socket *socket, struct resource *res,
  514. u32 min)
  515. {
  516. int i;
  517. for (i=0; i<PCI_BUS_NUM_RESOURCES; i++) {
  518. struct resource * root = socket->dev->bus->resource[i];
  519. if (!root)
  520. continue;
  521. if ((res->flags ^ root->flags) &
  522. (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH))
  523. continue; /* Wrong type */
  524. if (yenta_search_one_res(root, res, min))
  525. return 1;
  526. }
  527. return 0;
  528. }
  529. static int yenta_allocate_res(struct yenta_socket *socket, int nr, unsigned type, int addr_start, int addr_end)
  530. {
  531. struct resource *root, *res;
  532. struct pci_bus_region region;
  533. unsigned mask;
  534. res = socket->dev->resource + PCI_BRIDGE_RESOURCES + nr;
  535. /* Already allocated? */
  536. if (res->parent)
  537. return 0;
  538. /* The granularity of the memory limit is 4kB, on IO it's 4 bytes */
  539. mask = ~0xfff;
  540. if (type & IORESOURCE_IO)
  541. mask = ~3;
  542. res->name = socket->dev->subordinate->name;
  543. res->flags = type;
  544. region.start = config_readl(socket, addr_start) & mask;
  545. region.end = config_readl(socket, addr_end) | ~mask;
  546. if (region.start && region.end > region.start && !override_bios) {
  547. pcibios_bus_to_resource(socket->dev, res, &region);
  548. root = pci_find_parent_resource(socket->dev, res);
  549. if (root && (request_resource(root, res) == 0))
  550. return 0;
  551. printk(KERN_INFO "yenta %s: Preassigned resource %d busy or not available, reconfiguring...\n",
  552. pci_name(socket->dev), nr);
  553. }
  554. if (type & IORESOURCE_IO) {
  555. if ((yenta_search_res(socket, res, BRIDGE_IO_MAX)) ||
  556. (yenta_search_res(socket, res, BRIDGE_IO_ACC)) ||
  557. (yenta_search_res(socket, res, BRIDGE_IO_MIN)))
  558. return 1;
  559. } else {
  560. if (type & IORESOURCE_PREFETCH) {
  561. if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
  562. (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
  563. (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
  564. return 1;
  565. /* Approximating prefetchable by non-prefetchable */
  566. res->flags = IORESOURCE_MEM;
  567. }
  568. if ((yenta_search_res(socket, res, BRIDGE_MEM_MAX)) ||
  569. (yenta_search_res(socket, res, BRIDGE_MEM_ACC)) ||
  570. (yenta_search_res(socket, res, BRIDGE_MEM_MIN)))
  571. return 1;
  572. }
  573. printk(KERN_INFO "yenta %s: no resource of type %x available, trying to continue...\n",
  574. pci_name(socket->dev), type);
  575. res->start = res->end = res->flags = 0;
  576. return 0;
  577. }
  578. /*
  579. * Allocate the bridge mappings for the device..
  580. */
  581. static void yenta_allocate_resources(struct yenta_socket *socket)
  582. {
  583. int program = 0;
  584. program += yenta_allocate_res(socket, 0, IORESOURCE_IO,
  585. PCI_CB_IO_BASE_0, PCI_CB_IO_LIMIT_0);
  586. program += yenta_allocate_res(socket, 1, IORESOURCE_IO,
  587. PCI_CB_IO_BASE_1, PCI_CB_IO_LIMIT_1);
  588. program += yenta_allocate_res(socket, 2, IORESOURCE_MEM|IORESOURCE_PREFETCH,
  589. PCI_CB_MEMORY_BASE_0, PCI_CB_MEMORY_LIMIT_0);
  590. program += yenta_allocate_res(socket, 3, IORESOURCE_MEM,
  591. PCI_CB_MEMORY_BASE_1, PCI_CB_MEMORY_LIMIT_1);
  592. if (program)
  593. pci_setup_cardbus(socket->dev->subordinate);
  594. }
  595. /*
  596. * Free the bridge mappings for the device..
  597. */
  598. static void yenta_free_resources(struct yenta_socket *socket)
  599. {
  600. int i;
  601. for (i=0;i<4;i++) {
  602. struct resource *res;
  603. res = socket->dev->resource + PCI_BRIDGE_RESOURCES + i;
  604. if (res->start != 0 && res->end != 0)
  605. release_resource(res);
  606. res->start = res->end = res->flags = 0;
  607. }
  608. }
  609. /*
  610. * Close it down - release our resources and go home..
  611. */
  612. static void yenta_close(struct pci_dev *dev)
  613. {
  614. struct yenta_socket *sock = pci_get_drvdata(dev);
  615. /* Remove the register attributes */
  616. device_remove_file(&dev->dev, &dev_attr_yenta_registers);
  617. /* we don't want a dying socket registered */
  618. pcmcia_unregister_socket(&sock->socket);
  619. /* Disable all events so we don't die in an IRQ storm */
  620. cb_writel(sock, CB_SOCKET_MASK, 0x0);
  621. exca_writeb(sock, I365_CSCINT, 0);
  622. if (sock->cb_irq)
  623. free_irq(sock->cb_irq, sock);
  624. else
  625. del_timer_sync(&sock->poll_timer);
  626. if (sock->base)
  627. iounmap(sock->base);
  628. yenta_free_resources(sock);
  629. pci_release_regions(dev);
  630. pci_disable_device(dev);
  631. pci_set_drvdata(dev, NULL);
  632. }
  633. static struct pccard_operations yenta_socket_operations = {
  634. .init = yenta_sock_init,
  635. .suspend = yenta_sock_suspend,
  636. .get_status = yenta_get_status,
  637. .set_socket = yenta_set_socket,
  638. .set_io_map = yenta_set_io_map,
  639. .set_mem_map = yenta_set_mem_map,
  640. };
  641. #ifdef CONFIG_YENTA_TI
  642. #include "ti113x.h"
  643. #endif
  644. #ifdef CONFIG_YENTA_RICOH
  645. #include "ricoh.h"
  646. #endif
  647. #ifdef CONFIG_YENTA_TOSHIBA
  648. #include "topic.h"
  649. #endif
  650. #ifdef CONFIG_YENTA_O2
  651. #include "o2micro.h"
  652. #endif
  653. enum {
  654. CARDBUS_TYPE_DEFAULT = -1,
  655. CARDBUS_TYPE_TI,
  656. CARDBUS_TYPE_TI113X,
  657. CARDBUS_TYPE_TI12XX,
  658. CARDBUS_TYPE_TI1250,
  659. CARDBUS_TYPE_RICOH,
  660. CARDBUS_TYPE_TOPIC95,
  661. CARDBUS_TYPE_TOPIC97,
  662. CARDBUS_TYPE_O2MICRO,
  663. CARDBUS_TYPE_ENE,
  664. };
  665. /*
  666. * Different cardbus controllers have slightly different
  667. * initialization sequences etc details. List them here..
  668. */
  669. static struct cardbus_type cardbus_type[] = {
  670. #ifdef CONFIG_YENTA_TI
  671. [CARDBUS_TYPE_TI] = {
  672. .override = ti_override,
  673. .save_state = ti_save_state,
  674. .restore_state = ti_restore_state,
  675. .sock_init = ti_init,
  676. },
  677. [CARDBUS_TYPE_TI113X] = {
  678. .override = ti113x_override,
  679. .save_state = ti_save_state,
  680. .restore_state = ti_restore_state,
  681. .sock_init = ti_init,
  682. },
  683. [CARDBUS_TYPE_TI12XX] = {
  684. .override = ti12xx_override,
  685. .save_state = ti_save_state,
  686. .restore_state = ti_restore_state,
  687. .sock_init = ti_init,
  688. },
  689. [CARDBUS_TYPE_TI1250] = {
  690. .override = ti1250_override,
  691. .save_state = ti_save_state,
  692. .restore_state = ti_restore_state,
  693. .sock_init = ti_init,
  694. },
  695. #endif
  696. #ifdef CONFIG_YENTA_RICOH
  697. [CARDBUS_TYPE_RICOH] = {
  698. .override = ricoh_override,
  699. .save_state = ricoh_save_state,
  700. .restore_state = ricoh_restore_state,
  701. },
  702. #endif
  703. #ifdef CONFIG_YENTA_TOSHIBA
  704. [CARDBUS_TYPE_TOPIC95] = {
  705. .override = topic95_override,
  706. },
  707. [CARDBUS_TYPE_TOPIC97] = {
  708. .override = topic97_override,
  709. },
  710. #endif
  711. #ifdef CONFIG_YENTA_O2
  712. [CARDBUS_TYPE_O2MICRO] = {
  713. .override = o2micro_override,
  714. .restore_state = o2micro_restore_state,
  715. },
  716. #endif
  717. #ifdef CONFIG_YENTA_TI
  718. [CARDBUS_TYPE_ENE] = {
  719. .override = ene_override,
  720. .save_state = ti_save_state,
  721. .restore_state = ti_restore_state,
  722. .sock_init = ti_init,
  723. },
  724. #endif
  725. };
  726. /*
  727. * Only probe "regular" interrupts, don't
  728. * touch dangerous spots like the mouse irq,
  729. * because there are mice that apparently
  730. * get really confused if they get fondled
  731. * too intimately.
  732. *
  733. * Default to 11, 10, 9, 7, 6, 5, 4, 3.
  734. */
  735. static u32 isa_interrupts = 0x0ef8;
  736. static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
  737. {
  738. int i;
  739. unsigned long val;
  740. u32 mask;
  741. /*
  742. * Probe for usable interrupts using the force
  743. * register to generate bogus card status events.
  744. */
  745. cb_writel(socket, CB_SOCKET_EVENT, -1);
  746. cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
  747. exca_writeb(socket, I365_CSCINT, 0);
  748. val = probe_irq_on() & isa_irq_mask;
  749. for (i = 1; i < 16; i++) {
  750. if (!((val >> i) & 1))
  751. continue;
  752. exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG | (i << 4));
  753. cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
  754. udelay(100);
  755. cb_writel(socket, CB_SOCKET_EVENT, -1);
  756. }
  757. cb_writel(socket, CB_SOCKET_MASK, 0);
  758. exca_writeb(socket, I365_CSCINT, 0);
  759. mask = probe_irq_mask(val) & 0xffff;
  760. return mask;
  761. }
  762. /**
  763. * yenta PCI irq probing.
  764. * currently only used in the TI/EnE initialization code
  765. */
  766. #ifdef CONFIG_YENTA_TI
  767. /* interrupt handler, only used during probing */
  768. static irqreturn_t yenta_probe_handler(int irq, void *dev_id)
  769. {
  770. struct yenta_socket *socket = (struct yenta_socket *) dev_id;
  771. u8 csc;
  772. u32 cb_event;
  773. /* Clear interrupt status for the event */
  774. cb_event = cb_readl(socket, CB_SOCKET_EVENT);
  775. cb_writel(socket, CB_SOCKET_EVENT, -1);
  776. csc = exca_readb(socket, I365_CSC);
  777. if (cb_event || csc) {
  778. socket->probe_status = 1;
  779. return IRQ_HANDLED;
  780. }
  781. return IRQ_NONE;
  782. }
  783. /* probes the PCI interrupt, use only on override functions */
  784. static int yenta_probe_cb_irq(struct yenta_socket *socket)
  785. {
  786. if (!socket->cb_irq)
  787. return -1;
  788. socket->probe_status = 0;
  789. if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
  790. printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
  791. return -1;
  792. }
  793. /* generate interrupt, wait */
  794. exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG);
  795. cb_writel(socket, CB_SOCKET_EVENT, -1);
  796. cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
  797. cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS);
  798. msleep(100);
  799. /* disable interrupts */
  800. cb_writel(socket, CB_SOCKET_MASK, 0);
  801. exca_writeb(socket, I365_CSCINT, 0);
  802. cb_writel(socket, CB_SOCKET_EVENT, -1);
  803. exca_readb(socket, I365_CSC);
  804. free_irq(socket->cb_irq, socket);
  805. return (int) socket->probe_status;
  806. }
  807. #endif /* CONFIG_YENTA_TI */
  808. /*
  809. * Set static data that doesn't need re-initializing..
  810. */
  811. static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask)
  812. {
  813. socket->socket.pci_irq = socket->cb_irq;
  814. if (isa_probe)
  815. socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
  816. else
  817. socket->socket.irq_mask = 0;
  818. printk(KERN_INFO "Yenta: ISA IRQ mask 0x%04x, PCI irq %d\n",
  819. socket->socket.irq_mask, socket->cb_irq);
  820. }
  821. /*
  822. * Initialize the standard cardbus registers
  823. */
  824. static void yenta_config_init(struct yenta_socket *socket)
  825. {
  826. u16 bridge;
  827. struct pci_dev *dev = socket->dev;
  828. struct pci_bus_region region;
  829. pcibios_resource_to_bus(socket->dev, &region, &dev->resource[0]);
  830. config_writel(socket, CB_LEGACY_MODE_BASE, 0);
  831. config_writel(socket, PCI_BASE_ADDRESS_0, region.start);
  832. config_writew(socket, PCI_COMMAND,
  833. PCI_COMMAND_IO |
  834. PCI_COMMAND_MEMORY |
  835. PCI_COMMAND_MASTER |
  836. PCI_COMMAND_WAIT);
  837. /* MAGIC NUMBERS! Fixme */
  838. config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
  839. config_writeb(socket, PCI_LATENCY_TIMER, 168);
  840. config_writel(socket, PCI_PRIMARY_BUS,
  841. (176 << 24) | /* sec. latency timer */
  842. (dev->subordinate->subordinate << 16) | /* subordinate bus */
  843. (dev->subordinate->secondary << 8) | /* secondary bus */
  844. dev->subordinate->primary); /* primary bus */
  845. /*
  846. * Set up the bridging state:
  847. * - enable write posting.
  848. * - memory window 0 prefetchable, window 1 non-prefetchable
  849. * - PCI interrupts enabled if a PCI interrupt exists..
  850. */
  851. bridge = config_readw(socket, CB_BRIDGE_CONTROL);
  852. bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
  853. bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
  854. config_writew(socket, CB_BRIDGE_CONTROL, bridge);
  855. }
  856. /**
  857. * yenta_fixup_parent_bridge - Fix subordinate bus# of the parent bridge
  858. * @cardbus_bridge: The PCI bus which the CardBus bridge bridges to
  859. *
  860. * Checks if devices on the bus which the CardBus bridge bridges to would be
  861. * invisible during PCI scans because of a misconfigured subordinate number
  862. * of the parent brige - some BIOSes seem to be too lazy to set it right.
  863. * Does the fixup carefully by checking how far it can go without conflicts.
  864. * See http://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
  865. */
  866. static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
  867. {
  868. struct list_head *tmp;
  869. unsigned char upper_limit;
  870. /*
  871. * We only check and fix the parent bridge: All systems which need
  872. * this fixup that have been reviewed are laptops and the only bridge
  873. * which needed fixing was the parent bridge of the CardBus bridge:
  874. */
  875. struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
  876. /* Check bus numbers are already set up correctly: */
  877. if (bridge_to_fix->subordinate >= cardbus_bridge->subordinate)
  878. return; /* The subordinate number is ok, nothing to do */
  879. if (!bridge_to_fix->parent)
  880. return; /* Root bridges are ok */
  881. /* stay within the limits of the bus range of the parent: */
  882. upper_limit = bridge_to_fix->parent->subordinate;
  883. /* check the bus ranges of all silbling bridges to prevent overlap */
  884. list_for_each(tmp, &bridge_to_fix->parent->children) {
  885. struct pci_bus * silbling = pci_bus_b(tmp);
  886. /*
  887. * If the silbling has a higher secondary bus number
  888. * and it's secondary is equal or smaller than our
  889. * current upper limit, set the new upper limit to
  890. * the bus number below the silbling's range:
  891. */
  892. if (silbling->secondary > bridge_to_fix->subordinate
  893. && silbling->secondary <= upper_limit)
  894. upper_limit = silbling->secondary - 1;
  895. }
  896. /* Show that the wanted subordinate number is not possible: */
  897. if (cardbus_bridge->subordinate > upper_limit)
  898. printk(KERN_WARNING "Yenta: Upper limit for fixing this "
  899. "bridge's parent bridge: #%02x\n", upper_limit);
  900. /* If we have room to increase the bridge's subordinate number, */
  901. if (bridge_to_fix->subordinate < upper_limit) {
  902. /* use the highest number of the hidden bus, within limits */
  903. unsigned char subordinate_to_assign =
  904. min(cardbus_bridge->subordinate, upper_limit);
  905. printk(KERN_INFO "Yenta: Raising subordinate bus# of parent "
  906. "bus (#%02x) from #%02x to #%02x\n",
  907. bridge_to_fix->number,
  908. bridge_to_fix->subordinate, subordinate_to_assign);
  909. /* Save the new subordinate in the bus struct of the bridge */
  910. bridge_to_fix->subordinate = subordinate_to_assign;
  911. /* and update the PCI config space with the new subordinate */
  912. pci_write_config_byte(bridge_to_fix->self,
  913. PCI_SUBORDINATE_BUS, bridge_to_fix->subordinate);
  914. }
  915. }
  916. /*
  917. * Initialize a cardbus controller. Make sure we have a usable
  918. * interrupt, and that we can map the cardbus area. Fill in the
  919. * socket information structure..
  920. */
  921. static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_id *id)
  922. {
  923. struct yenta_socket *socket;
  924. int ret;
  925. /*
  926. * If we failed to assign proper bus numbers for this cardbus
  927. * controller during PCI probe, its subordinate pci_bus is NULL.
  928. * Bail out if so.
  929. */
  930. if (!dev->subordinate) {
  931. printk(KERN_ERR "Yenta: no bus associated with %s! "
  932. "(try 'pci=assign-busses')\n", pci_name(dev));
  933. return -ENODEV;
  934. }
  935. socket = kzalloc(sizeof(struct yenta_socket), GFP_KERNEL);
  936. if (!socket)
  937. return -ENOMEM;
  938. /* prepare pcmcia_socket */
  939. socket->socket.ops = &yenta_socket_operations;
  940. socket->socket.resource_ops = &pccard_nonstatic_ops;
  941. socket->socket.dev.dev = &dev->dev;
  942. socket->socket.driver_data = socket;
  943. socket->socket.owner = THIS_MODULE;
  944. socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
  945. socket->socket.map_size = 0x1000;
  946. socket->socket.cb_dev = dev;
  947. /* prepare struct yenta_socket */
  948. socket->dev = dev;
  949. pci_set_drvdata(dev, socket);
  950. /*
  951. * Do some basic sanity checking..
  952. */
  953. if (pci_enable_device(dev)) {
  954. ret = -EBUSY;
  955. goto free;
  956. }
  957. ret = pci_request_regions(dev, "yenta_socket");
  958. if (ret)
  959. goto disable;
  960. if (!pci_resource_start(dev, 0)) {
  961. printk(KERN_ERR "No cardbus resource!\n");
  962. ret = -ENODEV;
  963. goto release;
  964. }
  965. /*
  966. * Ok, start setup.. Map the cardbus registers,
  967. * and request the IRQ.
  968. */
  969. socket->base = ioremap(pci_resource_start(dev, 0), 0x1000);
  970. if (!socket->base) {
  971. ret = -ENOMEM;
  972. goto release;
  973. }
  974. /*
  975. * report the subsystem vendor and device for help debugging
  976. * the irq stuff...
  977. */
  978. printk(KERN_INFO "Yenta: CardBus bridge found at %s [%04x:%04x]\n",
  979. pci_name(dev), dev->subsystem_vendor, dev->subsystem_device);
  980. yenta_config_init(socket);
  981. /* Disable all events */
  982. cb_writel(socket, CB_SOCKET_MASK, 0x0);
  983. /* Set up the bridge regions.. */
  984. yenta_allocate_resources(socket);
  985. socket->cb_irq = dev->irq;
  986. /* Do we have special options for the device? */
  987. if (id->driver_data != CARDBUS_TYPE_DEFAULT &&
  988. id->driver_data < ARRAY_SIZE(cardbus_type)) {
  989. socket->type = &cardbus_type[id->driver_data];
  990. ret = socket->type->override(socket);
  991. if (ret < 0)
  992. goto unmap;
  993. }
  994. /* We must finish initialization here */
  995. if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
  996. /* No IRQ or request_irq failed. Poll */
  997. socket->cb_irq = 0; /* But zero is a valid IRQ number. */
  998. init_timer(&socket->poll_timer);
  999. socket->poll_timer.function = yenta_interrupt_wrapper;
  1000. socket->poll_timer.data = (unsigned long)socket;
  1001. socket->poll_timer.expires = jiffies + HZ;
  1002. add_timer(&socket->poll_timer);
  1003. printk(KERN_INFO "Yenta: no PCI IRQ, CardBus support disabled for this socket.\n"
  1004. KERN_INFO "Yenta: check your BIOS CardBus, BIOS IRQ or ACPI settings.\n");
  1005. } else {
  1006. socket->socket.features |= SS_CAP_CARDBUS;
  1007. }
  1008. /* Figure out what the dang thing can do for the PCMCIA layer... */
  1009. yenta_interrogate(socket);
  1010. yenta_get_socket_capabilities(socket, isa_interrupts);
  1011. printk(KERN_INFO "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
  1012. yenta_fixup_parent_bridge(dev->subordinate);
  1013. /* Register it with the pcmcia layer.. */
  1014. ret = pcmcia_register_socket(&socket->socket);
  1015. if (ret == 0) {
  1016. /* Add the yenta register attributes */
  1017. ret = device_create_file(&dev->dev, &dev_attr_yenta_registers);
  1018. if (ret == 0)
  1019. goto out;
  1020. /* error path... */
  1021. pcmcia_unregister_socket(&socket->socket);
  1022. }
  1023. unmap:
  1024. iounmap(socket->base);
  1025. release:
  1026. pci_release_regions(dev);
  1027. disable:
  1028. pci_disable_device(dev);
  1029. free:
  1030. kfree(socket);
  1031. out:
  1032. return ret;
  1033. }
  1034. #ifdef CONFIG_PM
  1035. static int yenta_dev_suspend (struct pci_dev *dev, pm_message_t state)
  1036. {
  1037. struct yenta_socket *socket = pci_get_drvdata(dev);
  1038. int ret;
  1039. ret = pcmcia_socket_dev_suspend(&dev->dev, state);
  1040. if (socket) {
  1041. if (socket->type && socket->type->save_state)
  1042. socket->type->save_state(socket);
  1043. /* FIXME: pci_save_state needs to have a better interface */
  1044. pci_save_state(dev);
  1045. pci_read_config_dword(dev, 16*4, &socket->saved_state[0]);
  1046. pci_read_config_dword(dev, 17*4, &socket->saved_state[1]);
  1047. pci_disable_device(dev);
  1048. /*
  1049. * Some laptops (IBM T22) do not like us putting the Cardbus
  1050. * bridge into D3. At a guess, some other laptop will
  1051. * probably require this, so leave it commented out for now.
  1052. */
  1053. /* pci_set_power_state(dev, 3); */
  1054. }
  1055. return ret;
  1056. }
  1057. static int yenta_dev_resume (struct pci_dev *dev)
  1058. {
  1059. struct yenta_socket *socket = pci_get_drvdata(dev);
  1060. if (socket) {
  1061. int rc;
  1062. pci_set_power_state(dev, 0);
  1063. /* FIXME: pci_restore_state needs to have a better interface */
  1064. pci_restore_state(dev);
  1065. pci_write_config_dword(dev, 16*4, socket->saved_state[0]);
  1066. pci_write_config_dword(dev, 17*4, socket->saved_state[1]);
  1067. rc = pci_enable_device(dev);
  1068. if (rc)
  1069. return rc;
  1070. pci_set_master(dev);
  1071. if (socket->type && socket->type->restore_state)
  1072. socket->type->restore_state(socket);
  1073. }
  1074. return pcmcia_socket_dev_resume(&dev->dev);
  1075. }
  1076. #endif
  1077. #define CB_ID(vend,dev,type) \
  1078. { \
  1079. .vendor = vend, \
  1080. .device = dev, \
  1081. .subvendor = PCI_ANY_ID, \
  1082. .subdevice = PCI_ANY_ID, \
  1083. .class = PCI_CLASS_BRIDGE_CARDBUS << 8, \
  1084. .class_mask = ~0, \
  1085. .driver_data = CARDBUS_TYPE_##type, \
  1086. }
  1087. static struct pci_device_id yenta_table [] = {
  1088. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1031, TI),
  1089. /*
  1090. * TBD: Check if these TI variants can use more
  1091. * advanced overrides instead. (I can't get the
  1092. * data sheets for these devices. --rmk)
  1093. */
  1094. #ifdef CONFIG_YENTA_TI
  1095. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1210, TI),
  1096. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1130, TI113X),
  1097. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1131, TI113X),
  1098. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1211, TI12XX),
  1099. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1220, TI12XX),
  1100. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1221, TI12XX),
  1101. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, TI12XX),
  1102. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251A, TI12XX),
  1103. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1251B, TI12XX),
  1104. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, TI12XX),
  1105. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1450, TI12XX),
  1106. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1451A, TI12XX),
  1107. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1510, TI12XX),
  1108. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1520, TI12XX),
  1109. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1620, TI12XX),
  1110. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4410, TI12XX),
  1111. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4450, TI12XX),
  1112. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4451, TI12XX),
  1113. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4510, TI12XX),
  1114. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_4520, TI12XX),
  1115. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1250, TI1250),
  1116. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1410, TI1250),
  1117. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
  1118. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
  1119. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12, TI12XX),
  1120. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
  1121. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
  1122. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),
  1123. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7510, TI12XX),
  1124. CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7610, TI12XX),
  1125. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_710, TI12XX),
  1126. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_712, TI12XX),
  1127. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_720, TI12XX),
  1128. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_722, TI12XX),
  1129. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1211, ENE),
  1130. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1225, ENE),
  1131. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1410, ENE),
  1132. CB_ID(PCI_VENDOR_ID_ENE, PCI_DEVICE_ID_ENE_1420, ENE),
  1133. #endif /* CONFIG_YENTA_TI */
  1134. #ifdef CONFIG_YENTA_RICOH
  1135. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C465, RICOH),
  1136. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C466, RICOH),
  1137. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C475, RICOH),
  1138. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, RICOH),
  1139. CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C478, RICOH),
  1140. #endif
  1141. #ifdef CONFIG_YENTA_TOSHIBA
  1142. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC95, TOPIC95),
  1143. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
  1144. CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
  1145. #endif
  1146. #ifdef CONFIG_YENTA_O2
  1147. CB_ID(PCI_VENDOR_ID_O2, PCI_ANY_ID, O2MICRO),
  1148. #endif
  1149. /* match any cardbus bridge */
  1150. CB_ID(PCI_ANY_ID, PCI_ANY_ID, DEFAULT),
  1151. { /* all zeroes */ }
  1152. };
  1153. MODULE_DEVICE_TABLE(pci, yenta_table);
  1154. static struct pci_driver yenta_cardbus_driver = {
  1155. .name = "yenta_cardbus",
  1156. .id_table = yenta_table,
  1157. .probe = yenta_probe,
  1158. .remove = __devexit_p(yenta_close),
  1159. #ifdef CONFIG_PM
  1160. .suspend = yenta_dev_suspend,
  1161. .resume = yenta_dev_resume,
  1162. #endif
  1163. };
  1164. static int __init yenta_socket_init(void)
  1165. {
  1166. return pci_register_driver (&yenta_cardbus_driver);
  1167. }
  1168. static void __exit yenta_socket_exit (void)
  1169. {
  1170. pci_unregister_driver (&yenta_cardbus_driver);
  1171. }
  1172. module_init(yenta_socket_init);
  1173. module_exit(yenta_socket_exit);
  1174. MODULE_LICENSE("GPL");