13bdab16cSMauro Carvalho Chehab============== 23bdab16cSMauro Carvalho ChehabDriver changes 33bdab16cSMauro Carvalho Chehab============== 43bdab16cSMauro Carvalho Chehab 53bdab16cSMauro Carvalho ChehabThis file details changes in 2.6 which affect PCMCIA card driver authors: 63bdab16cSMauro Carvalho Chehab 73bdab16cSMauro Carvalho Chehab* pcmcia_loop_config() and autoconfiguration (as of 2.6.36) 83bdab16cSMauro Carvalho Chehab If `struct pcmcia_device *p_dev->config_flags` is set accordingly, 93bdab16cSMauro Carvalho Chehab pcmcia_loop_config() now sets up certain configuration values 103bdab16cSMauro Carvalho Chehab automatically, though the driver may still override the settings 113bdab16cSMauro Carvalho Chehab in the callback function. The following autoconfiguration options 123bdab16cSMauro Carvalho Chehab are provided at the moment: 133bdab16cSMauro Carvalho Chehab 143bdab16cSMauro Carvalho Chehab - CONF_AUTO_CHECK_VCC : check for matching Vcc 153bdab16cSMauro Carvalho Chehab - CONF_AUTO_SET_VPP : set Vpp 163bdab16cSMauro Carvalho Chehab - CONF_AUTO_AUDIO : auto-enable audio line, if required 173bdab16cSMauro Carvalho Chehab - CONF_AUTO_SET_IO : set ioport resources (->resource[0,1]) 183bdab16cSMauro Carvalho Chehab - CONF_AUTO_SET_IOMEM : set first iomem resource (->resource[2]) 193bdab16cSMauro Carvalho Chehab 203bdab16cSMauro Carvalho Chehab* pcmcia_request_configuration -> pcmcia_enable_device (as of 2.6.36) 213bdab16cSMauro Carvalho Chehab pcmcia_request_configuration() got renamed to pcmcia_enable_device(), 223bdab16cSMauro Carvalho Chehab as it mirrors pcmcia_disable_device(). Configuration settings are now 233bdab16cSMauro Carvalho Chehab stored in struct pcmcia_device, e.g. in the fields config_flags, 243bdab16cSMauro Carvalho Chehab config_index, config_base, vpp. 253bdab16cSMauro Carvalho Chehab 263bdab16cSMauro Carvalho Chehab* pcmcia_request_window changes (as of 2.6.36) 273bdab16cSMauro Carvalho Chehab Instead of win_req_t, drivers are now requested to fill out 283bdab16cSMauro Carvalho Chehab `struct pcmcia_device *p_dev->resource[2,3,4,5]` for up to four ioport 293bdab16cSMauro Carvalho Chehab ranges. After a call to pcmcia_request_window(), the regions found there 303bdab16cSMauro Carvalho Chehab are reserved and may be used immediately -- until pcmcia_release_window() 313bdab16cSMauro Carvalho Chehab is called. 323bdab16cSMauro Carvalho Chehab 333bdab16cSMauro Carvalho Chehab* pcmcia_request_io changes (as of 2.6.36) 343bdab16cSMauro Carvalho Chehab Instead of io_req_t, drivers are now requested to fill out 353bdab16cSMauro Carvalho Chehab `struct pcmcia_device *p_dev->resource[0,1]` for up to two ioport 363bdab16cSMauro Carvalho Chehab ranges. After a call to pcmcia_request_io(), the ports found there 373bdab16cSMauro Carvalho Chehab are reserved, after calling pcmcia_request_configuration(), they may 383bdab16cSMauro Carvalho Chehab be used. 393bdab16cSMauro Carvalho Chehab 403bdab16cSMauro Carvalho Chehab* No dev_info_t, no cs_types.h (as of 2.6.36) 413bdab16cSMauro Carvalho Chehab dev_info_t and a few other typedefs are removed. No longer use them 423bdab16cSMauro Carvalho Chehab in PCMCIA device drivers. Also, do not include pcmcia/cs_types.h, as 433bdab16cSMauro Carvalho Chehab this file is gone. 443bdab16cSMauro Carvalho Chehab 453bdab16cSMauro Carvalho Chehab* No dev_node_t (as of 2.6.35) 463bdab16cSMauro Carvalho Chehab There is no more need to fill out a "dev_node_t" structure. 473bdab16cSMauro Carvalho Chehab 483bdab16cSMauro Carvalho Chehab* New IRQ request rules (as of 2.6.35) 493bdab16cSMauro Carvalho Chehab Instead of the old pcmcia_request_irq() interface, drivers may now 503bdab16cSMauro Carvalho Chehab choose between: 513bdab16cSMauro Carvalho Chehab 523bdab16cSMauro Carvalho Chehab - calling request_irq/free_irq directly. Use the IRQ from `*p_dev->irq`. 533bdab16cSMauro Carvalho Chehab - use pcmcia_request_irq(p_dev, handler_t); the PCMCIA core will 543bdab16cSMauro Carvalho Chehab clean up automatically on calls to pcmcia_disable_device() or 553bdab16cSMauro Carvalho Chehab device ejection. 563bdab16cSMauro Carvalho Chehab 573bdab16cSMauro Carvalho Chehab* no cs_error / CS_CHECK / CONFIG_PCMCIA_DEBUG (as of 2.6.33) 583bdab16cSMauro Carvalho Chehab Instead of the cs_error() callback or the CS_CHECK() macro, please use 593bdab16cSMauro Carvalho Chehab Linux-style checking of return values, and -- if necessary -- debug 603bdab16cSMauro Carvalho Chehab messages using "dev_dbg()" or "pr_debug()". 613bdab16cSMauro Carvalho Chehab 623bdab16cSMauro Carvalho Chehab* New CIS tuple access (as of 2.6.33) 633bdab16cSMauro Carvalho Chehab Instead of pcmcia_get_{first,next}_tuple(), pcmcia_get_tuple_data() and 643bdab16cSMauro Carvalho Chehab pcmcia_parse_tuple(), a driver shall use "pcmcia_get_tuple()" if it is 653bdab16cSMauro Carvalho Chehab only interested in one (raw) tuple, or "pcmcia_loop_tuple()" if it is 663bdab16cSMauro Carvalho Chehab interested in all tuples of one type. To decode the MAC from CISTPL_FUNCE, 673bdab16cSMauro Carvalho Chehab a new helper "pcmcia_get_mac_from_cis()" was added. 683bdab16cSMauro Carvalho Chehab 693bdab16cSMauro Carvalho Chehab* New configuration loop helper (as of 2.6.28) 703bdab16cSMauro Carvalho Chehab By calling pcmcia_loop_config(), a driver can iterate over all available 713bdab16cSMauro Carvalho Chehab configuration options. During a driver's probe() phase, one doesn't need 723bdab16cSMauro Carvalho Chehab to use pcmcia_get_{first,next}_tuple, pcmcia_get_tuple_data and 733bdab16cSMauro Carvalho Chehab pcmcia_parse_tuple directly in most if not all cases. 743bdab16cSMauro Carvalho Chehab 753bdab16cSMauro Carvalho Chehab* New release helper (as of 2.6.17) 763bdab16cSMauro Carvalho Chehab Instead of calling pcmcia_release_{configuration,io,irq,win}, all that's 773bdab16cSMauro Carvalho Chehab necessary now is calling pcmcia_disable_device. As there is no valid 783bdab16cSMauro Carvalho Chehab reason left to call pcmcia_release_io and pcmcia_release_irq, the 793bdab16cSMauro Carvalho Chehab exports for them were removed. 803bdab16cSMauro Carvalho Chehab 813bdab16cSMauro Carvalho Chehab* Unify detach and REMOVAL event code, as well as attach and INSERTION 823bdab16cSMauro Carvalho Chehab code (as of 2.6.16):: 833bdab16cSMauro Carvalho Chehab 843bdab16cSMauro Carvalho Chehab void (*remove) (struct pcmcia_device *dev); 853bdab16cSMauro Carvalho Chehab int (*probe) (struct pcmcia_device *dev); 863bdab16cSMauro Carvalho Chehab 873bdab16cSMauro Carvalho Chehab* Move suspend, resume and reset out of event handler (as of 2.6.16):: 883bdab16cSMauro Carvalho Chehab 893bdab16cSMauro Carvalho Chehab int (*suspend) (struct pcmcia_device *dev); 903bdab16cSMauro Carvalho Chehab int (*resume) (struct pcmcia_device *dev); 913bdab16cSMauro Carvalho Chehab 923bdab16cSMauro Carvalho Chehab should be initialized in struct pcmcia_driver, and handle 933bdab16cSMauro Carvalho Chehab (SUSPEND == RESET_PHYSICAL) and (RESUME == CARD_RESET) events 943bdab16cSMauro Carvalho Chehab 953bdab16cSMauro Carvalho Chehab* event handler initialization in struct pcmcia_driver (as of 2.6.13) 963bdab16cSMauro Carvalho Chehab The event handler is notified of all events, and must be initialized 973bdab16cSMauro Carvalho Chehab as the event() callback in the driver's struct pcmcia_driver. 983bdab16cSMauro Carvalho Chehab 993bdab16cSMauro Carvalho Chehab* pcmcia/version.h should not be used (as of 2.6.13) 1003bdab16cSMauro Carvalho Chehab This file will be removed eventually. 1013bdab16cSMauro Carvalho Chehab 1023bdab16cSMauro Carvalho Chehab* in-kernel device<->driver matching (as of 2.6.13) 1033bdab16cSMauro Carvalho Chehab PCMCIA devices and their correct drivers can now be matched in 1043bdab16cSMauro Carvalho Chehab kernelspace. See 'devicetable.txt' for details. 1053bdab16cSMauro Carvalho Chehab 1063bdab16cSMauro Carvalho Chehab* Device model integration (as of 2.6.11) 1073bdab16cSMauro Carvalho Chehab A struct pcmcia_device is registered with the device model core, 1083bdab16cSMauro Carvalho Chehab and can be used (e.g. for SET_NETDEV_DEV) by using 1093bdab16cSMauro Carvalho Chehab handle_to_dev(client_handle_t * handle). 1103bdab16cSMauro Carvalho Chehab 1113bdab16cSMauro Carvalho Chehab* Convert internal I/O port addresses to unsigned int (as of 2.6.11) 1123bdab16cSMauro Carvalho Chehab ioaddr_t should be replaced by unsigned int in PCMCIA card drivers. 1133bdab16cSMauro Carvalho Chehab 1143bdab16cSMauro Carvalho Chehab* irq_mask and irq_list parameters (as of 2.6.11) 1153bdab16cSMauro Carvalho Chehab The irq_mask and irq_list parameters should no longer be used in 1163bdab16cSMauro Carvalho Chehab PCMCIA card drivers. Instead, it is the job of the PCMCIA core to 1173bdab16cSMauro Carvalho Chehab determine which IRQ should be used. Therefore, link->irq.IRQInfo2 1183bdab16cSMauro Carvalho Chehab is ignored. 1193bdab16cSMauro Carvalho Chehab 1203bdab16cSMauro Carvalho Chehab* client->PendingEvents is gone (as of 2.6.11) 1213bdab16cSMauro Carvalho Chehab client->PendingEvents is no longer available. 1223bdab16cSMauro Carvalho Chehab 1233bdab16cSMauro Carvalho Chehab* client->Attributes are gone (as of 2.6.11) 1243bdab16cSMauro Carvalho Chehab client->Attributes is unused, therefore it is removed from all 1253bdab16cSMauro Carvalho Chehab PCMCIA card drivers 1263bdab16cSMauro Carvalho Chehab 1273bdab16cSMauro Carvalho Chehab* core functions no longer available (as of 2.6.11) 1283bdab16cSMauro Carvalho Chehab The following functions have been removed from the kernel source 1293bdab16cSMauro Carvalho Chehab because they are unused by all in-kernel drivers, and no external 1303bdab16cSMauro Carvalho Chehab driver was reported to rely on them:: 1313bdab16cSMauro Carvalho Chehab 1323bdab16cSMauro Carvalho Chehab pcmcia_get_first_region() 1333bdab16cSMauro Carvalho Chehab pcmcia_get_next_region() 1343bdab16cSMauro Carvalho Chehab pcmcia_modify_window() 1353bdab16cSMauro Carvalho Chehab pcmcia_set_event_mask() 1363bdab16cSMauro Carvalho Chehab pcmcia_get_first_window() 1373bdab16cSMauro Carvalho Chehab pcmcia_get_next_window() 1383bdab16cSMauro Carvalho Chehab 1393bdab16cSMauro Carvalho Chehab* device list iteration upon module removal (as of 2.6.10) 1403bdab16cSMauro Carvalho Chehab It is no longer necessary to iterate on the driver's internal 1413bdab16cSMauro Carvalho Chehab client list and call the ->detach() function upon module removal. 1423bdab16cSMauro Carvalho Chehab 1433bdab16cSMauro Carvalho Chehab* Resource management. (as of 2.6.8) 1443bdab16cSMauro Carvalho Chehab Although the PCMCIA subsystem will allocate resources for cards, 1453bdab16cSMauro Carvalho Chehab it no longer marks these resources busy. This means that driver 1463bdab16cSMauro Carvalho Chehab authors are now responsible for claiming your resources as per 1473bdab16cSMauro Carvalho Chehab other drivers in Linux. You should use request_region() to mark 1483bdab16cSMauro Carvalho Chehab your IO regions in-use, and request_mem_region() to mark your 1493bdab16cSMauro Carvalho Chehab memory regions in-use. The name argument should be a pointer to 1503bdab16cSMauro Carvalho Chehab your driver name. Eg, for pcnet_cs, name should point to the 1513bdab16cSMauro Carvalho Chehab string "pcnet_cs". 1523bdab16cSMauro Carvalho Chehab 1533bdab16cSMauro Carvalho Chehab* CardServices is gone 1543bdab16cSMauro Carvalho Chehab CardServices() in 2.4 is just a big switch statement to call various 1553bdab16cSMauro Carvalho Chehab services. In 2.6, all of those entry points are exported and called 1563bdab16cSMauro Carvalho Chehab directly (except for pcmcia_report_error(), just use cs_error() instead). 1573bdab16cSMauro Carvalho Chehab 1583bdab16cSMauro Carvalho Chehab* struct pcmcia_driver 1593bdab16cSMauro Carvalho Chehab You need to use struct pcmcia_driver and pcmcia_{un,}register_driver 1603bdab16cSMauro Carvalho Chehab instead of {un,}register_pccard_driver 161