Ejemplo n.º 1
0
/** make proc filesystem **/
int zion_proc_read(char *buf, char **start, off_t offset,
		   int length, int *eof, void *data)
{
  zion_params_t *zion_params;
  int j;
  u32 val=0;
  u16 revision;
  int len=0;

  zion_params = find_zion(0);
  if(zion_params==NULL)
    {
      return 0;
    }

  revision = mbus_readw(MBUS_ADDR(zion_params,0));

  len += sprintf(buf+len,
		 "ZION (Rev. %04X):\n"
		 "   Base Address:\n"
		 "      MBusAddr=0x%X(%d byte) WorkRAM=0x%X(%d byte)\n"
		 "      SDRAM=0x%X(%d byte) Partial-SDRAM=0x%X(%d byte)\n"
		 "   Resources:\n"
		 "      Bus=%d Dev=%d Func=%d IRQ=%d\n"
		 "   Driver:\n"
		 "      Version: %s.%s.%s\n",
		 revision,
		 zion_params->mbus_addr, zion_params->mbus_size,
		 zion_params->wram_addr, zion_params->wram_size,
		 zion_params->whole_sdram_addr, zion_params->whole_sdram_size,
		 zion_params->partial_sdram_addr, zion_params->partial_sdram_size,
		 (zion_params->dev->bus)->number, (zion_params->dev->devfn) >> 3,
		 (zion_params->dev->devfn) & 0x07,zion_params->dev->irq,
		 ZIONDRV_MAJOR_VER, ZIONDRV_MINOR_VER, ZIONDRV_PATCH_LEV);
  
  len += sprintf(buf + len,"   (VENDOR_ID=%04X,",   zion_params->dev->vendor);
  len += sprintf(buf + len," DEVICE_ID=%04X)\n",   zion_params->dev->device);

  len+= sprintf(buf+len, "   PCI Config Regs. : \n");

  for (j = 0; j < 256; j += 4) {
    if ((j % 32) == 0) {
      len += sprintf(buf + len,"0x%02X : ", j);
    }
    pci_read_config_dword(zion_params->dev, j, &val);
    len += sprintf(buf + len,"%08X ", val);
    if ((j % 32) == 28) {
      len += sprintf(buf + len,"\n");
    }
  }

  len -= offset;

  if(len < length)
    {
      *eof = 1;
      if(len <= 0) return 0;
    }
  else
    {
      len = length;
    }

  *start = buf + offset;

  return len;
}
Ejemplo n.º 2
0
int zion_set_params(struct zionvga_reset_arg *reset_arg)
{
  u16 reg = 0;
  int pal_line = reset_arg->pal_line;
  int spl_line = reset_arg->spl_line;
  zion_params_t *params = find_zion(0);
  if(params == NULL){
	return -ENODEV;
  }

  reg = mbus_readw(MBUS_ADDR(params,ZIONVGA_VGA_SETTING));

  reg &= VGA_RSTR_EN;  //Don't touch VGA_RSTR_EN bit (It should be set by TX)

  if(pal_line==576)
    {
      reg |= PAL_LINE_SEL;
      ZIONVGA_Y_RES = 576;
    }
  else if(pal_line==480)
    {
      reg &= ~PAL_LINE_SEL;
      ZIONVGA_Y_RES = 480;
    }
  else
    {
      PERROR("Unsupported VGA SIZE : PAL-Line=%d",pal_line);
      return -EINVAL;
    }

  if(spl_line==720)
    {
      reg |= SPL_SEL;
      ZIONVGA_X_RES = 720;
    }
  else if(spl_line==640)
    {
      reg &= ~SPL_SEL;
      ZIONVGA_X_RES = 640;
    }
  else
    {
      PERROR("Unsupported VGA SIZE : SPL-Line=%d",spl_line);
      return -EINVAL;      
    }

#if defined(CONFIG_P2PF_K240) || defined(CONFIG_P2PF_K202) || defined(CONFIG_P2PF_K246A)
  reg |= (CSC_EN);
#else
  reg |= (CSC_EN|TRS_ON);
#endif //CONFIG_P2PF_K240 || CONFIG_P2PF_K246A

  mbus_writew(reg, MBUS_ADDR(params,ZIONVGA_VGA_SETTING));

  // Just for assurance
  reg = mbus_readw(MBUS_ADDR(params,ZIONVGA_VGA_SETTING));

  zionvga_encode_var( &default_var );
  zion_fb_info.fb_info.var = default_var;

  return 0;
}
Ejemplo n.º 3
0
static int zion_common_ioctl(zion_params_t *zion_params,
			     struct inode *inode, struct file *filp,
			     unsigned int function, unsigned long arg)
{
  struct zion_config_byte zion_config_byte = {0};
  struct zion_config_word zion_config_word = {0};
  struct zion_config_dword zion_config_dword = {0};
  struct zion_buf zion_buf;
  struct ZION_Interrupt_Bits zion_interrupt = {0};
  u16 revision;

  switch(function)
    {
    case ZION_MBUS_READ_CONFIG_BYTE:

      if(copy_from_user((void *)&zion_config_byte, (void *)arg, sizeof(struct zion_config_byte)))
	return -EFAULT;

      zion_config_byte.val = (u8) mbus_readb( MBUS_ADDR(zion_params, zion_config_byte.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_byte, sizeof(struct zion_config_byte)))
	return -EFAULT;

      break;

    case ZION_MBUS_READ_CONFIG_WORD:

      if(copy_from_user((void *)&zion_config_word, (void *)arg, sizeof(struct zion_config_word)))
	return -EFAULT;

      zion_config_word.val = (u16) mbus_readw( MBUS_ADDR(zion_params,zion_config_word.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_word, sizeof(struct zion_config_word)))
	return -EFAULT;

      break;

    case ZION_MBUS_READ_CONFIG_DWORD:

      if(copy_from_user((void *)&zion_config_dword, (void *)arg, sizeof(struct zion_config_dword)))
	return -EFAULT;

      zion_config_dword.val = (u32) mbus_readl( MBUS_ADDR(zion_params,zion_config_dword.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_dword, sizeof(struct zion_config_dword)))
	return -EFAULT;

      break;

    case ZION_MBUS_WRITE_CONFIG_BYTE:

      if(copy_from_user((void *)&zion_config_byte, (void *)arg, sizeof(struct zion_config_byte)))
	return -EFAULT;

       mbus_writeb(zion_config_byte.val, MBUS_ADDR(zion_params, zion_config_byte.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_byte, sizeof(struct zion_config_byte)))
	return -EFAULT;

      break;
	
    case ZION_MBUS_WRITE_CONFIG_WORD:

      if(copy_from_user((void *)&zion_config_word, (void *)arg, sizeof(struct zion_config_word)))
	return -EFAULT;

       mbus_writew(zion_config_word.val, MBUS_ADDR(zion_params, zion_config_word.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_word, sizeof(struct zion_config_word)))
	return -EFAULT;

      break;

    case ZION_MBUS_WRITE_CONFIG_DWORD:

      if(copy_from_user((void *)&zion_config_dword, (void *)arg, sizeof(struct zion_config_dword)))
	return -EFAULT;

       mbus_writel(zion_config_dword.val, MBUS_ADDR(zion_params, zion_config_dword.where) );

      if(copy_to_user((void *)arg, (void *)&zion_config_dword, sizeof(struct zion_config_dword)))
	return -EFAULT;

      break;

    case ZION_WRAM_READ:

      if(copy_from_user((void *)&zion_buf, (void *)arg, sizeof(struct zion_buf)))
	return -EFAULT;

      if((zion_buf.size = neo_wram_pio_read(zion_params, zion_buf.addr, zion_buf.buf, zion_buf.size, zion_buf.access_type))==0)
	return -EINVAL;

      if(copy_to_user((void *)arg, (void *)&zion_buf, sizeof(struct zion_buf)))
	return -EFAULT;

      break;

    case ZION_WRAM_WRITE:

      if(copy_from_user((void *)&zion_buf, (void *)arg, sizeof(struct zion_buf)))
	return -EFAULT;

      if((zion_buf.size = neo_wram_pio_write(zion_params, zion_buf.addr, zion_buf.buf, zion_buf.size, zion_buf.access_type))==0)
	return -EINVAL;

      if(copy_to_user((void *)arg, (void *)&zion_buf, sizeof(struct zion_buf)))
	return -EFAULT;

      break;

    case ZION_WAIT_INTERRUPT:

      zion_goto_bed(zion_params, &zion_interrupt);  /* zion_interrupt.c */

      if(copy_to_user((void *)arg, (void *)&zion_interrupt, sizeof(struct ZION_Interrupt_Bits)))
	return -EFAULT;

      break;

    case ZION_WAKE_THREADS_UP:

      zion_rout_them_up(zion_params);    /* zion_interrupt.c */

      break;

    case ZION_SET_ENABLE_BITS:

      if(copy_from_user((void *)&zion_interrupt, (void *)arg, sizeof(struct ZION_Interrupt_Bits)))
	return -EFAULT;

      zion_set_enable_bits(zion_params, &zion_interrupt);  /* zion_interrupt.c */

      break;

    case ZION_GET_ENABLE_BITS:

      zion_get_enable_bits(zion_params, &zion_interrupt);  /* zion_interrupt.c */

      if(copy_to_user((void *)arg, (void *)&zion_interrupt, sizeof(struct ZION_Interrupt_Bits)))
	return -EFAULT;

      break;

    case ZION_SET_TIMEOUT:

      zion_params->wait_timeout = arg;  /* by jiffies */

      break;

    case ZION_GET_REVISION:
      revision = zion_params->revision;
      if(copy_to_user((void *)arg, (void *)&revision, sizeof(u16)))
	{
	  return -EFAULT;
	}
      break;

    default:
      PERROR("No such IOCTL.\n");
      return -EINVAL;
    }

  return 0;
}