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