int __iorpc_close_pollfd(int fd, int pollfd_cookie)
{
	struct close_pollfd_param temp;
	struct close_pollfd_param *params = &temp;

	params->pollfd.kernel.cookie = pollfd_cookie;

	return hv_dev_pwrite(fd, 0, (HV_VirtAddr) params, sizeof(*params),
			     IORPC_OP_CLOSE_POLLFD);
}
Example #2
0
int gxio_trio_force_ep_link_up(gxio_trio_context_t * context, unsigned int mac)
{
	struct force_ep_link_up_param temp;
	struct force_ep_link_up_param *params = &temp;

	params->mac = mac;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_FORCE_EP_LINK_UP);
}
static int tile_srom_write(struct mtd_info *mtd, loff_t to, size_t len,
			  size_t *retlen, const unsigned char *buf)
{
	struct tile_srom_dev *dev = to_tile_srom_dev(mtd);
	int curoff = 0;
	int returned = 0;

	/* Sanity checks */
	if (!len)
		return 0;

	if (to + len > mtd->size)
		return -EINVAL;

	curoff = (u32) to & (mtd->writesize - 1);
	to -= curoff;

	while (len) {
		int thislen;
		int hv_retval;
		char wr_buf[mtd->writesize];

		thislen = (mtd->writesize - curoff > len)
			     ? len
			     : mtd->writesize - curoff;

		memset(wr_buf, 0xFF, mtd->writesize);
		memcpy(wr_buf + curoff, buf, thislen);

		hv_retval = hv_dev_pwrite(dev->hv_devhdl, 0,
					  (HV_VirtAddr) wr_buf,
					  mtd->writesize, (u32) to);
		if (hv_retval != mtd->writesize) {
			DEBUG(MTD_DEBUG_LEVEL1, "hv_dev_pwrite failed,"
			      " error %d\n", hv_retval);
			if (retlen)
				*retlen = returned;
			return -EIO;
		}

		len -= thislen;
		buf += thislen;
		returned += thislen;
		to += mtd->writesize;

		/* We only have an offset once. */
		curoff = 0;
	}

	if (retlen)
		*retlen = returned;

	return 0;
}
int __iorpc_check_mmio_offset(int fd, unsigned long offset, unsigned long size)
{
	struct check_mmio_offset_param temp;
	struct check_mmio_offset_param *params = &temp;

	params->offset = offset;
	params->size = size;

	return hv_dev_pwrite(fd, 0, (HV_VirtAddr) params, sizeof(*params),
			     IORPC_OP_CHECK_MMIO_OFFSET);
}
Example #5
0
int gxio_uart_check_mmio_offset(gxio_uart_context_t *context,
				unsigned long offset, unsigned long size)
{
	struct check_mmio_offset_param temp;
	struct check_mmio_offset_param *params = &temp;

	params->offset = offset;
	params->size = size;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_UART_OP_CHECK_MMIO_OFFSET);
}
Example #6
0
int gxio_usb_host_register_client_memory(gxio_usb_host_context_t * context,
        HV_PTE pte, unsigned int flags)
{
    struct register_client_memory_param temp;
    struct register_client_memory_param *params = &temp;

    params->pte = pte;
    params->flags = flags;

    return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
                         sizeof(*params),
                         GXIO_USB_HOST_OP_REGISTER_CLIENT_MEMORY);
}
Example #7
0
int gxio_trio_set_mps_mrs(gxio_trio_context_t * context, uint16_t mps,
			  uint16_t mrs, unsigned int mac)
{
	struct set_mps_mrs_param temp;
	struct set_mps_mrs_param *params = &temp;

	params->mps = mps;
	params->mrs = mrs;
	params->mac = mac;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_SET_MPS_MRS);
}
Example #8
0
int gxio_trio_alloc_asids(gxio_trio_context_t * context, unsigned int count,
			  unsigned int first, unsigned int flags)
{
	struct alloc_asids_param temp;
	struct alloc_asids_param *params = &temp;

	params->count = count;
	params->first = first;
	params->flags = flags;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_ALLOC_ASIDS);
}
Example #9
0
int gxio_usb_host_cfg_interrupt(gxio_usb_host_context_t * context, int inter_x,
                                int inter_y, int inter_ipi, int inter_event)
{
    struct cfg_interrupt_param temp;
    struct cfg_interrupt_param *params = &temp;

    params->interrupt.kernel.x = inter_x;
    params->interrupt.kernel.y = inter_y;
    params->interrupt.kernel.ipi = inter_ipi;
    params->interrupt.kernel.event = inter_event;

    return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
                         sizeof(*params), GXIO_USB_HOST_OP_CFG_INTERRUPT);
}
Example #10
0
int gxio_trio_init_pio_region_aux(gxio_trio_context_t * context,
				  unsigned int pio_region, unsigned int mac,
				  uint32_t bus_address_hi, unsigned int flags)
{
	struct init_pio_region_aux_param temp;
	struct init_pio_region_aux_param *params = &temp;

	params->pio_region = pio_region;
	params->mac = mac;
	params->bus_address_hi = bus_address_hi;
	params->flags = flags;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_INIT_PIO_REGION_AUX);
}
Example #11
0
int gxio_trio_config_legacy_intr(gxio_trio_context_t * context, int inter_x,
				 int inter_y, int inter_ipi, int inter_event,
				 unsigned int mac, unsigned int intx)
{
	struct config_legacy_intr_param temp;
	struct config_legacy_intr_param *params = &temp;

	params->interrupt.kernel.x = inter_x;
	params->interrupt.kernel.y = inter_y;
	params->interrupt.kernel.ipi = inter_ipi;
	params->interrupt.kernel.event = inter_event;
	params->mac = mac;
	params->intx = intx;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_CONFIG_LEGACY_INTR);
}
static int tile_srom_erase(struct mtd_info *mtd, struct erase_info *instr)
{
	struct tile_srom_dev *dev = to_tile_srom_dev(mtd);
	u32 addr, end;

	/* Sanity checks */
	if (instr->addr + instr->len > mtd->size)
		return -EINVAL;

	if ((u32)instr->len & (mtd->erasesize - 1)) {
		pr_err("tile_srom: erase length invalid: erase size %#x, "
		       "length %#x\n", mtd->erasesize, (u32)instr->len);
		return -EINVAL;
	}

	if ((u32)instr->addr & (mtd->erasesize - 1)) {
		pr_err("tile_srom: erase addr invalid: erase size %#X, "
		       "addr %#x\n", mtd->erasesize, (u32)instr->addr);
		return -EINVAL;
	}

	addr = instr->addr;
	end = addr + instr->len;

	while (addr < end) {
		int hv_retval;
		char dummy = 0;

		hv_retval = hv_dev_pwrite(dev->hv_devhdl, 0,
					  (HV_VirtAddr)&dummy, sizeof(dummy),
					  SROM_ERASE_OFF | (u32) addr);
		if (hv_retval != sizeof(dummy)) {
			DEBUG(MTD_DEBUG_LEVEL1, "hv_dev_pwrite for erase"
			      " failed, error %d\n", hv_retval);
			return -EIO;
		}

		addr += mtd->erasesize;
	}

	instr->state = MTD_ERASE_DONE;
	mtd_erase_callback(instr);
	return 0;
}
Example #13
0
/*
 * If the termios OPOST bit is set then the write_room method will be
 * called to find out how much space should be passed in one write.
 * If the OPOST bit is not set then softuart_write will be called with
 * as much as the higher level has to write, and any unwritten data
 * will be immediately retried.
 */
static int softuart_write(struct tty_struct *tty,
	     const unsigned char *buf, int count)
{
	struct softuart_private *softuartp = tty->driver_data;
	unsigned long flags;
	int retval = 0;

	spin_lock_irqsave(&softuartp->lock, flags);

	retval = hv_dev_pwrite(softuart_fd, 0, (HV_VirtAddr)buf, count, 0);
	if (retval < 0) {
		pr_err("softuart:  Unable to write to HV: %d\n", retval);
		count = 0;
	}

	spin_unlock_irqrestore(&softuartp->lock, flags);

	return retval;
}
Example #14
0
int gxio_trio_config_msi_intr(gxio_trio_context_t * context, int inter_x,
			      int inter_y, int inter_ipi, int inter_event,
			      unsigned int mac, unsigned int mem_map,
			      uint64_t mem_map_base, uint64_t mem_map_limit,
			      unsigned int asid)
{
	struct config_msi_intr_param temp;
	struct config_msi_intr_param *params = &temp;

	params->interrupt.kernel.x = inter_x;
	params->interrupt.kernel.y = inter_y;
	params->interrupt.kernel.ipi = inter_ipi;
	params->interrupt.kernel.event = inter_event;
	params->mac = mac;
	params->mem_map = mem_map;
	params->mem_map_base = mem_map_base;
	params->mem_map_limit = mem_map_limit;
	params->asid = asid;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params), GXIO_TRIO_OP_CONFIG_MSI_INTR);
}
Example #15
0
int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t * context,
				      unsigned int map, unsigned long va,
				      uint64_t size, unsigned int asid,
				      unsigned int mac, uint64_t bus_address,
				      unsigned int node,
				      unsigned int order_mode)
{
	struct init_memory_map_mmu_aux_param temp;
	struct init_memory_map_mmu_aux_param *params = &temp;

	params->map = map;
	params->va = va;
	params->size = size;
	params->asid = asid;
	params->mac = mac;
	params->bus_address = bus_address;
	params->node = node;
	params->order_mode = order_mode;

	return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
			     sizeof(*params),
			     GXIO_TRIO_OP_INIT_MEMORY_MAP_MMU_AUX);
}
Example #16
0
/*
 * Pass the downcall handle to the HV so it can interrupt us.
 */
static int softuart_configure_downcall(u32 intarg)
{
	return hv_dev_pwrite(softuart_fd, 0, (HV_VirtAddr)&intarg,
			     sizeof(u32), SOFTUART_INTARG);
}