Exemple #1
0
int mvme_open(MVME_INTERFACE **vme, int index)
{
   BT617_TABLE *ptab;
   bt_devdata_t flag;
   int status;

   *vme = (MVME_INTERFACE *)malloc(sizeof(MVME_INTERFACE));
   if (*vme == NULL)
      return MVME_NO_MEM;

   (*vme)->am       = MVME_AM_DEFAULT;
   (*vme)->dmode    = MVME_DMODE_DEFAULT;
   (*vme)->blt_mode = MVME_BLT_NONE;

   (*vme)->handle = 0; /* use first entry in BT617_TABLE by default */

   (*vme)->table = (void *)malloc(sizeof(BT617_TABLE)*MAX_BT617_TABLES);
   if ((*vme)->table == NULL)
      return MVME_NO_MEM;

   memset((*vme)->table, 0, sizeof(BT617_TABLE)*MAX_BT617_TABLES);   
   ptab = (BT617_TABLE *) (*vme)->table;

   ptab->am = MVME_AM_DEFAULT;
   
   bt_gen_name(index, BT_DEV_A32, ptab->devname, BT_MAX_DEV_NAME);
   status = bt_open(&ptab->btd, ptab->devname, BT_RDWR);
   if (status != BT_SUCCESS) {
      bt_perror(ptab->btd, status, "bt_open error");
      return MVME_NO_INTERFACE;
   }
   bt_init(ptab->btd);
   bt_clrerr(ptab->btd);

   /* select swapping mode */
   flag = BT_SWAP_NONE;
   bt_set_info(ptab->btd, BT_INFO_SWAP, flag);

   /* set data mode */
   flag = BT_WIDTH_D32;
   bt_set_info(ptab->btd, BT_INFO_DATAWIDTH, flag);

   /* switch off block transfer */
   flag = FALSE;
   bt_set_info(ptab->btd, BT_INFO_BLOCK, flag);

   return MVME_SUCCESS;
}
int vme_open()
{
   /*  Open SBS VME-PCI  */
    status = bt_open(&btd, bt_gen_name(unit, type, &devname[0], BT_MAX_DEV_NAME), BT_RD | BT_WR);
    if (BT_SUCCESS != status) {
        bt_perror(btd, status, "Engine ERROR: Could not open SBS VME-PCI");
		remove("/Applications/sirius/system/engine.lock");
        return -1;
    }
	
    /* Clear any outstanding errors */
    status = bt_clrerr(btd);
    if (BT_SUCCESS != status) {
        bt_perror(btd, status, "Engine ERROR: Could not clear errors from SBS VME-PCI");
		remove("/Applications/sirius/system/engine.lock");
        (void) bt_close(btd);
        return -1;
    }
	return 0;
}
Exemple #3
0
int bt617_set_am(MVME_INTERFACE *vme, int am)
{
   int i;
   BT617_TABLE *ptab;
   bt_error_t status;
   bt_devdata_t flag;

   for (i=0 ; i<MAX_BT617_TABLES ; i++)
      if (((BT617_TABLE *)vme->table)[i].am == am)
         break;

   if (((BT617_TABLE *)vme->table)[i].am == am) {

      vme->handle = i;
      ptab = ((BT617_TABLE *)vme->table)+i;
      bt_set_info(ptab->btd, BT_INFO_DMA_AMOD, am);
      bt_set_info(ptab->btd, BT_INFO_PIO_AMOD, am);
      bt_set_info(ptab->btd, BT_INFO_MMAP_AMOD, am);
      return MVME_SUCCESS;
   }

   /* search free slot */
   for (i=0 ; i<MAX_BT617_TABLES ; i++)
      if (((BT617_TABLE *)vme->table)[i].am == 0)
         break;
   if (i==MAX_BT617_TABLES)
      return MVME_NO_MEM;

   /* mode not yet open, open it */
   vme->handle = i;
   ptab = ((BT617_TABLE *)vme->table)+i;

   ptab->am = am;
   if (am == MVME_AM_A16_SD || am == MVME_AM_A16_ND)
      bt_gen_name(vme->index, BT_DEV_A16, ptab->devname, BT_MAX_DEV_NAME);
   else if (am == MVME_AM_A24_SB     ||
            am == MVME_AM_A24_SP     ||
            am == MVME_AM_A24_SD     ||
            am == MVME_AM_A24_NB     ||
            am == MVME_AM_A24_NP     ||
            am == MVME_AM_A24_ND     ||
            am == MVME_AM_A24_SMBLT  ||
            am == MVME_AM_A24_NMBLT  ||
            am == MVME_AM_A24        ||
            am == MVME_AM_A24_D64)
      bt_gen_name(vme->index, BT_DEV_A24, ptab->devname, BT_MAX_DEV_NAME);
   else
      bt_gen_name(vme->index, BT_DEV_A32, ptab->devname, BT_MAX_DEV_NAME);

   status = bt_open(&ptab->btd, ptab->devname, BT_RDWR);
   if (status != BT_SUCCESS) {
      bt_perror(ptab->btd, status, "bt_open error");
      return MVME_NO_INTERFACE;
   }
   bt_init(ptab->btd);
   bt_clrerr(ptab->btd);

   /* select swapping mode */
   flag = BT_SWAP_NONE;
   bt_set_info(ptab->btd, BT_INFO_SWAP, flag);

   /* set data mode */
   flag = BT_WIDTH_D16;
   bt_set_info(ptab->btd, BT_INFO_DATAWIDTH, flag);

   /* switch off block transfer */
   flag = FALSE;
   bt_set_info(ptab->btd, BT_INFO_BLOCK, flag);

   /* set amod */
   bt_set_info(ptab->btd, BT_INFO_DMA_AMOD, am);
   bt_set_info(ptab->btd, BT_INFO_PIO_AMOD, am);
   bt_set_info(ptab->btd, BT_INFO_MMAP_AMOD, am);

   return MVME_SUCCESS;
}
Exemple #4
0
int fb_init()
{
   bt_error_t status;           /* Bit 3 library error return type */
   char devname[BT_MAX_DEV_NAME];       /* Device to open */
   bt_devdata_t flag;

   /* Open the device in A24 space */
   bt_gen_name(0, BT_DEV_A24, devname, BT_MAX_DEV_NAME);
   status = bt_open(&btd, devname, BT_RDWR);
   if (status != BT_SUCCESS) {
      cm_msg(MERROR, "fb_init", "Cannot open Bit3 device driver");
      return FALSE;
   }
   bt_init(btd);
   bt_clrerr(btd);

   /* map SFI memory */
   status = bt_mmap(btd, &_sfi, SFI_ADDRESS, SFI_SIZE, BT_RDWR, BT_SWAP_DEFAULT);
   if (status != BT_SUCCESS) {
      cm_msg(MERROR, "fb_init", "Cannot map VME memory");
      bt_close(btd);
      return FALSE;
   }

   /* Open the device in local memory */
   bt_gen_name(0, BT_DEV_LM, devname, BT_MAX_DEV_NAME);
   status = bt_open(&btd_lm, devname, BT_RDWR);
   if (status != BT_SUCCESS) {
      cm_msg(MERROR, "fb_init", "Cannot open Bit3 device for local memory");
      return FALSE;
   }
   bt_clrerr(btd_lm);

   /* map local memory */
   status =
       bt_mmap(btd_lm, &remote_ram_buffer, 0, REMOTE_RAM_SIZE, BT_RDWR, BT_SWAP_DEFAULT);
   if (status != BT_SUCCESS) {
      cm_msg(MERROR, "fb_init", "Cannot map local memory");
      bt_close(btd);
      return FALSE;
   }

   /* clear local memory */
   memset(remote_ram_buffer, 0, REMOTE_RAM_SIZE);

   /* force D32 mode */
   bt_get_info(btd, BT_INFO_MMAP_AMOD, &flag);
   flag = BT_AMOD_A24_SD;
   bt_set_info(btd, BT_INFO_MMAP_AMOD, flag);

   /* sequencer reset */
   SFI_OUT(SFI_SEQUENCER_RESET, 0);

   /* arbitration level */
//  SFI_OUT(SFI_FASTBUS_ARBITRATION_LEVEL_REGISTER, 0x15);
   SFI_OUT(SFI_FASTBUS_ARBITRATION_LEVEL_REGISTER, 0xBF);

   /* timeout */
   SFI_OUT(SFI_FASTBUS_TIMEOUT_REGISTER, 0x73);

   /* sequencer enable */
   SFI_OUT(SFI_SEQUENCER_ENABLE, 0);

   /* switch off all output */
   SFI_OUT(SFI_CLEAR_BOTH_LCA1_TEST_REGISTER, 0);

   /* clear registers */
   SFI_OUT(SFI_RESET_REGISTER_GROUP_LCA2, 0);

   return SUCCESS;
}