⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btusb.c

📁 strongarm的bootloader
💻 C
字号:
/****************************************************************************//* Copyright 2000 Compaq Computer Corporation.                              *//*                                           .                              *//* Copying or modifying this code for any purpose is permitted,             *//* provided that this copyright notice is preserved in its entirety         *//* in all copies or modifications.  COMPAQ COMPUTER CORPORATION             *//* MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, AS TO THE USEFULNESS          *//* OR CORRECTNESS OF THIS CODE OR ITS FITNESS FOR ANY PARTICULAR            *//* PURPOSE.                                                                 *//****************************************************************************//* * btusb.c - Test file for USB * */#include "bootconfig.h"#include "bootldr.h"#include "ohci.h"static HcEndpointDescriptor hced0;static HcTransferDescriptor hctd0;static HcTransferDescriptor hctd1;static HCCA hcca;static char hctdata0[8];void testUSB(char *args){   int i;   volatile dword *usb_config = (dword *)0x7bc00800;   volatile dword *usb_mem = (dword *)0x00000000;   memset((char*)&hcca, 0, sizeof(hcca));   memset((char*)&hced0, 0, sizeof(hced0));   memset((char*)&hctd0, 0, sizeof(hctd0));   memset((char*)&hctd1, 0, sizeof(hctd1));   hced0.control = 0 & 0x7f; /* FA: function address */   hced0.control |= ((0 & 0xF) << 7); /* EN: endpoint number */   hced0.control |= ((1 & 0x3) << 11); /* D: direction  -- 1 == OUT */   hced0.control |= ((0 & 0x1) << 13); /* S: speed -- 0 == full-speed */   hced0.control |= ((0 & 0x1) << 14); /* K: skip -- 0 == no skip */   hced0.control |= ((0 & 0x1) << 15); /* F: format -- 0 == general */   hced0.control |= ((8 & 0x7F) << 16); /* MPS: maximum packet size -- 8 */   hced0.tailp = (dword) &hctd1;   hced0.headp = (dword) &hctd0;   hced0.nextED = 0;   for (i = 0; i < 8; i++)      hctdata0[i] = 0x5a;   hctd0.control = 0;   hctd0.control |= ((1 & 0x1) << 18); /* DR: data rounding */   hctd0.control |= ((00 & 0x3) << 19); /* DP: direction/pid -- 00==setup */   hctd0.control |= ((00 & 0x7) << 21); /* DI: DelayInterrupt */   hctd0.control |= ((00 & 0x3) << 24); /* T: DataToggle */   hctd0.control |= ((00 & 0x3) << 26); /* EC: ErrorCount */   hctd0.control |= ((00 & 0xF) << 28); /* CC: Condition Code */   hctd0.cbp = &hctdata0[0];   hctd0.nextTD = (dword) &hctd1;   hctd0.BE = &hctdata0[7];   /* make sure HC can be PCI master */   putLabeledWord("21285 SDRAM BAR: ", *(dword *)0x42000018);   usb_mem[0x18 >> 2] = (dword)&hcca; /* tell OPTi where the hcca structure is in memory */   usb_mem[0x20] = (dword)&hced0; /* control endpoint descriptor list */   usb_mem[0x4 >> 2] =       ((2 << 6) /* USB operational */       | (1 << 4) /* control endpoint enabled */       );   usb_mem[0x8 >> 2] =       (1 << 2); /* enable the control endpoint list */   putLabeledWord("USB StatusCommand: ", usb_config[4 >> 2]);   *(((byte*)usb_config)+0x4e) = 7; /* turn on test0 and test1 outputs */   putLabeledWord("USB I2C: ", usb_config[0x4C >> 2]);   usb_config[0x50 >> 2] &= 0xFF0FFFFFl;   putLabeledWord("USB FeatureControl: ", usb_config[0x50 >> 2]);#if 0   putLabeledWord("USB MemOfst4: ", usb_mem[0x4 >> 2]);   putLabeledWord("USB MemOfst8: ", usb_mem[0x8 >> 2]);#endif   putLabeledWord("USB MemofstC: ", usb_mem[0xC >> 2]);   putLabeledWord("USB Memofst10: ", usb_mem[0x10 >> 2]);   putLabeledWord("USB Memofst14: ", usb_mem[0x14 >> 2]);   putLabeledWord("USB Memofst1C: ", usb_mem[0x1C >> 2]);   usb_mem[0x48 >> 2] |= (2 << 8); /* turn on power switches */   putLabeledWord("USB Memofst48: ", usb_mem[0x48 >> 2]);   usb_mem[0x4C >> 2] = 0xFFFFFFFFl;      usb_mem[0x50 >> 2] = (1 << 16) | (0x80 << 8); /* set global power on */   putLabeledWord("USB Memofst50: ", usb_mem[0x50 >> 2]);   putLabeledWord("USB Memofst54: ", usb_mem[0x54 >> 2]);   putLabeledWord("USB Memofst58: ", usb_mem[0x58 >> 2]);   {      dword hcFrameNumber = usb_mem[0x3c >> 2];      dword hccaFrameNumber = hcca.frameNumber;      dword hcStatusCommand = usb_config[4 >> 2];      dword hcControl = usb_mem[4 >> 2];      dword hcStatus = usb_mem[0xC >> 2];      dword hcMem50 = usb_mem[0x50 >> 2];      dword hcMem54 = usb_mem[0x54 >> 2];      dword hcMem58 = usb_mem[0x58 >> 2];      dword hcMem20 = usb_mem[0x20 >> 2];      dword hcMem24 = usb_mem[0x24 >> 2];      int c;      for (c = 0; c < 1000000; c++) {         dword newHcFrameNumber = usb_mem[0x3c >> 2];         dword newHccaFrameNumber = hcca.frameNumber;         dword newHcStatusCommand = usb_config[4 >> 2];         dword newHcControl = usb_mem[4 >> 2];         dword newHcStatus = usb_mem[0xC >> 2];         dword newHcMem50 = usb_mem[0x50 >> 2];         dword newHcMem54 = usb_mem[0x54 >> 2];         dword newHcMem58 = usb_mem[0x58 >> 2];         dword newHcMem20 = usb_mem[0x20 >> 2];         dword newHcMem24 = usb_mem[0x24 >> 2];         if (hcFrameNumber != newHcFrameNumber             || hccaFrameNumber != newHccaFrameNumber             || hcStatusCommand != newHcStatusCommand             || hcControl != newHcControl             || hcStatus != newHcStatus             || hcMem50 != newHcMem50             || hcMem54 != newHcMem54             || hcMem58 != newHcMem58             || hcMem20 != newHcMem20             || hcMem24 != newHcMem24             ) {            putstr("\r\n");            putLabeledWord("wait count: ", c);            putLabeledWord("HcFrameNumber: ", newHcFrameNumber);            putLabeledWord("HcFrameRemaining: ", usb_mem[0x38 >> 2]);            putLabeledWord("HccaFrameNumber: ", newHccaFrameNumber);            putLabeledWord("HcStatusCommand: ", newHcStatusCommand);            putLabeledWord("HcMem50: ", newHcMem50);            putLabeledWord("HcMem54: ", newHcMem54);            putLabeledWord("HcMem58: ", newHcMem58);            putLabeledWord("HcMem20: ", newHcMem20);            putLabeledWord("HcMem24: ", newHcMem24);            hcFrameNumber = newHcFrameNumber;            hccaFrameNumber = newHccaFrameNumber;            hcStatusCommand = newHcStatusCommand;            hcControl = newHcControl;            hcStatus = newHcStatus;            hcMem50 = newHcMem50;            hcMem54 = newHcMem54;            hcMem58 = newHcMem58;            hcMem20 = newHcMem20;            hcMem24 = newHcMem24;         }      }   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -