/** * Submit a command to the RAID block * * @param num_words Number of command words to submit * @param words Command words * * @return Zero on success, negative on failure */ int cvmx_raid_submit(int num_words, cvmx_raid_word_t words[]) { cvmx_cmd_queue_result_t result = cvmx_cmd_queue_write(CVMX_CMD_QUEUE_RAID, 1, num_words, (uint64_t *) words); if (result == CVMX_CMD_QUEUE_SUCCESS) cvmx_write_csr(CVMX_ADDR_DID(CVMX_FULL_DID(14, 0)), num_words); return result; }
/** * Submit a command to the ZIP block * * @param command Zip command to submit * @param queue Zip instruction queue of the command * * @return Zero on success, negative on failure */ int cvmx_zip_queue_submit(cvmx_zip_command_t *command, int queue) { cvmx_cmd_queue_result_t result = cvmx_cmd_queue_write(CVMX_CMD_QUEUE_ZIP_QUE(queue), 1, 8, command->u64); if (result == CVMX_CMD_QUEUE_SUCCESS) cvmx_write_csr((CVMX_ADDR_DID(CVMX_FULL_DID(7, 0)) | queue << 3), 8); return result; }
static struct resource * octopci_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { struct octopci_softc *sc; struct resource *res; struct rman *rm; int error; sc = device_get_softc(bus); switch (type) { case SYS_RES_IRQ: res = bus_generic_alloc_resource(bus, child, type, rid, start, end, count, flags); if (res != NULL) return (res); return (NULL); case SYS_RES_MEMORY: rm = &sc->sc_mem1; break; case SYS_RES_IOPORT: rm = &sc->sc_io; break; default: return (NULL); } res = rman_reserve_resource(rm, start, end, count, flags, child); if (res == NULL) return (NULL); rman_set_rid(res, *rid); rman_set_bustag(res, octopci_bus_space); switch (type) { case SYS_RES_MEMORY: rman_set_bushandle(res, CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_PCI, CVMX_OCT_SUBDID_PCI_MEM1)) + rman_get_start(res)); break; case SYS_RES_IOPORT: rman_set_bushandle(res, CVMX_ADDR_DID(CVMX_FULL_DID(CVMX_OCT_DID_PCI, CVMX_OCT_SUBDID_PCI_IO)) + rman_get_start(res)); /* * XXX * We should just disallow use of io ports on !n64 since without * 64-bit PTEs we can't even do a 32-bit virtual address * mapped to them. */ #if 0 rman_set_virtual(res, (void *)rman_get_bushandle(res)); #endif break; } if ((flags & RF_ACTIVE) != 0) { error = bus_activate_resource(child, type, *rid, res); if (error != 0) { rman_release_resource(res); return (NULL); } } return (res); }