Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/block/ahci/ahci.c

    r8820544 r7f620e8  
    3838#include <device/hw_res_parsed.h>
    3939#include <pci_dev_iface.h>
    40 #include <irc.h>
     40#include <sysinfo.h>
     41#include <ipc/irc.h>
     42#include <ns.h>
    4143#include <ahci_iface.h>
    4244#include "ahci.h"
     
    127129
    128130static void ahci_get_model_name(uint16_t *, char *);
     131static int ahci_enable_interrupt(int);
    129132
    130133static fibril_mutex_t sata_devices_count_lock;
     
    231234       
    232235        uintptr_t phys;
    233         void *ibuf = AS_AREA_ANY;
     236        void *ibuf;
    234237        int rc = dmamem_map_anonymous(sata->block_size, DMAMEM_4GiB,
    235238            AS_AREA_READ | AS_AREA_WRITE, 0, &phys, &ibuf);
     
    274277       
    275278        uintptr_t phys;
    276         void *ibuf = AS_AREA_ANY;
     279        void *ibuf;
    277280        int rc = dmamem_map_anonymous(sata->block_size, DMAMEM_4GiB,
    278281            AS_AREA_READ | AS_AREA_WRITE, 0, &phys, &ibuf);
     
    433436       
    434437        uintptr_t phys;
    435         sata_identify_data_t *idata = AS_AREA_ANY;
     438        sata_identify_data_t *idata;
    436439        int rc = dmamem_map_anonymous(SATA_IDENTIFY_DEVICE_BUFFER_LENGTH,
    437440            DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0, &phys,
    438             (void *) &idata);
     441            (void **) &idata);
    439442        if (rc != EOK) {
    440443                ddf_msg(LVL_ERROR, "Cannot allocate buffer to identify device.");
     
    627630       
    628631        uintptr_t phys;
    629         sata_identify_data_t *idata = AS_AREA_ANY;
     632        sata_identify_data_t *idata;
    630633        int rc = dmamem_map_anonymous(SATA_SET_FEATURE_BUFFER_LENGTH,
    631634            DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0, &phys,
    632             (void *) &idata);
     635            (void **) &idata);
    633636        if (rc != EOK) {
    634637                ddf_msg(LVL_ERROR, "Cannot allocate buffer for device set mode.");
     
    890893/** AHCI interrupt handler.
    891894 *
     895 * @param dev   DDF device structure.
    892896 * @param iid   The IPC call id.
    893897 * @param icall The IPC call structure.
    894  * @param dev   DDF device structure.
    895  *
    896  */
    897 static void ahci_interrupt(ipc_callid_t iid, ipc_call_t *icall, ddf_dev_t *dev)
     898 *
     899 */
     900static void ahci_interrupt(ddf_dev_t *dev, ipc_callid_t iid, ipc_call_t *icall)
    898901{
    899902        ahci_dev_t *ahci = dev_ahci_dev(dev);
     
    935938        size_t size = 4096;
    936939        uintptr_t phys = 0;
    937         void *virt_fb = AS_AREA_ANY;
    938         void *virt_cmd = AS_AREA_ANY;
    939         void *virt_table = AS_AREA_ANY;
     940        void *virt_fb = NULL;
     941        void *virt_cmd = NULL;
     942        void *virt_table = NULL;
    940943        ddf_fun_t *fun;
    941944       
     
    11521155       
    11531156        /* Map AHCI registers. */
    1154         ahci->memregs = AS_AREA_ANY;
     1157        ahci->memregs = NULL;
    11551158       
    11561159        physmem_map(RNGABS(hw_res_parsed.mem_ranges.ranges[0]),
    11571160            AHCI_MEMREGS_PAGES_COUNT, AS_AREA_READ | AS_AREA_WRITE,
    1158             (void *) &ahci->memregs);
     1161            (void **) &ahci->memregs);
    11591162        if (ahci->memregs == NULL)
    11601163                goto error_map_registers;
     
    11921195        }
    11931196       
    1194         rc = irc_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
     1197        rc = ahci_enable_interrupt(hw_res_parsed.irqs.irqs[0]);
    11951198        if (rc != EOK) {
    11961199                ddf_msg(LVL_ERROR, "Failed enable interupt.");
     
    13121315}
    13131316
     1317/** Enable interrupt using SERVICE_IRC.
     1318 *
     1319 * @param irq Requested irq number.
     1320 *
     1321 * @return EOK if succeed, error code otherwise.
     1322 *
     1323 */
     1324static int ahci_enable_interrupt(int irq)
     1325{
     1326        async_sess_t *irc_sess = NULL;
     1327        irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE, SERVICE_IRC, 0, 0);
     1328        if (!irc_sess)
     1329                return EINTR;
     1330       
     1331        async_exch_t *exch = async_exchange_begin(irc_sess);
     1332        const int rc = async_req_1_0(exch, IRC_ENABLE_INTERRUPT, irq);
     1333        async_exchange_end(exch);
     1334       
     1335        async_hangup(irc_sess);
     1336        return rc;
     1337}
     1338
    13141339/*----------------------------------------------------------------------------*/
    13151340/*-- AHCI Main routine -------------------------------------------------------*/
Note: See TracChangeset for help on using the changeset viewer.