• Alan Cox's avatar
    resource: shared I/O region support · 8b6d043b
    Alan Cox authored
    SuperIO devices share regions and use lock/unlock operations to chip
    select.  We therefore need to be able to request a resource and wait for
    it to be freed by whichever other SuperIO device currently hogs it.
    Right now you have to poll which is horrible.
    
    Add a MUXED field to IO port resources. If the MUXED field is set on the
    resource and on the request (via request_muxed_region) then we block
    until the previous owner of the muxed resource releases their region.
    
    This allows us to implement proper resource sharing and locking for
    superio chips using code of the form
    
    enable_my_superio_dev() {
    	request_muxed_region(0x44, 0x02, "superio:watchdog");
    	outb() ..sequence to enable chip
    }
    
    disable_my_superio_dev() {
    	outb() .. sequence of disable chip
    	release_region(0x44, 0x02);
    }
    Signed-off-by: default avatarGiel van Schijndel <me@mortis.eu>
    Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    8b6d043b
resource.c 23.4 KB