sysmain.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:11k
源码类别:

DVD

开发平台:

C/C++

  1. /*
  2. ** FILE
  3. ** sysmain.c
  4. **
  5. ** DESCRIPTION
  6. **
  7. ** sysmain.c now contains system-level init functions, which
  8. ** must resides in ROM (well, non-volatile devices that is 
  9. ** reliable through failure.)
  10. */
  11. #include "config.h"
  12. #include "global.h"
  13. #include "regmap.h"
  14. #include "pu8560.h"
  15. #include "reset.h"
  16. #include "drv.h"
  17. #include "emuio.h"
  18. #include "kernel.h"
  19. #include "ata.h"
  20. #include "macro.h"
  21. #include "viddec.h"
  22. #include "nav.h"
  23. #include "image.h"
  24. #include "tvif.h"
  25. #include "user_init.h"
  26. #include "cardfs.h"
  27. #include "lbc.h"
  28. #include "sinf.h"
  29. //#include "memmap0.h"
  30. #include "gpio.h" 
  31. #include "LanguageUtil.h"   // 2004/09/19 yltseng
  32. #ifdef SUPPORT_SPI
  33. #include "spi.h"
  34. #endif
  35. #ifndef DVDRELEASE
  36. //#define SYSMAIN_DBG     1
  37. #endif
  38. #ifdef SUPPORT_CARD_STORAGE
  39. extern void CardReset(void);
  40. #endif
  41. //#define ERROR_CONCEALMENT
  42. //#define RUN_TESTS
  43. //#define TEST_ROM
  44. //#define TEST_JPEG
  45. //#define TEST_CPPM
  46. #ifdef HDMI
  47. extern void ResetAuthentStates();
  48. #endif
  49. #ifdef SUPPORT_USB//liweihua 2003-9-25
  50.  #ifdef HOST_UHCI    
  51.     extern void sl811h_init(void);
  52.  #else
  53.     extern void uhci_reset(void);
  54.  #endif
  55. #endif
  56. extern void ShowTitle();
  57. extern void InitVar(void);          // in sysmain2.c
  58. extern void set_default_value(void);
  59. extern void ap_main(void);          //Jeff 20010717
  60. extern int  font_decompress(void);      // in osdfont_decompress.c
  61. extern void     init_I2C_panel(void);
  62. #ifndef  RUN_TESTS
  63. #define run_tests()     ((void)0)
  64. #else
  65. //
  66. // FUNCTION
  67. // run_tests()
  68. //
  69. // DESCRIPTION
  70. // run test programs after booting
  71. //
  72. void
  73. run_tests()
  74. {
  75.     //tv_setup_output(TVOUT_SVIDEO);//set S-video output(composited+S-Video)(0x00:D0-D1-D2-D3=CVBS-C-Y-CVBS)
  76.     
  77. #ifdef  TEST_ROM
  78.     test_rom_based_video();
  79. #endif
  80. #ifdef  TEST_CPPM
  81.     test_cppm();
  82. #endif
  83. #ifdef  TEST_JPEG
  84.     test_jpeg();
  85. #endif
  86. }
  87. #endif
  88. share       share_data;
  89. DataSaved   *pDSV;
  90. FSJPEGDATA  *pFsJpeg;
  91. UINT8       srv_on          = 0;
  92. UINT8       power_on_mute   = 1;
  93. #ifdef SPHE1000 //MIKEY
  94. extern UINT8 f_drv_init; // run drv_init
  95. #endif
  96. #define GET_RTC_15_0()  (regs0->rtc_15_0)
  97. #include "sysmain_inc.h"//terry,2004/1/28 10:24AM
  98. #ifdef DVD_SERVO
  99. #include "system_servo.c"
  100. #endif
  101. #include "system_sleep.c"
  102. //#include "system_jpeg_logo.c" // 2004/10/07 yltseng
  103. #include "system_util.c"
  104. #include "system_mjpeg.c"
  105. #include "system_mp4.c"
  106. #include "system_game16.c"
  107. //#include "jpegeffect_help.c"// liulifeng ,2004-6-30 14:28//nono mark it.4-7-15 0:56
  108. #ifdef SUPPORT_HDD_ACCESS
  109. int load_hdd_init()
  110. {
  111.     int i;
  112.     UINT32  lbaRoot;
  113.     watchdog_onoff(0);
  114.     atapi_share_rom_bus();
  115.     MIPS_flush_LBC_cache();
  116.     delay_1ms(3000);
  117.     for(i=0;i<10;i++) {
  118. //        if(CardIsExist()) {
  119.         if(FSIsExist()) {
  120.             printf("Sunplus DVD load HDD driver OK!!n");
  121.             break;
  122.         }
  123.         delay_1ms(100);
  124.     }
  125. //    lbaRoot = CardGetRoot();
  126.     lbaRoot = FSGetRoot();
  127. }
  128. #endif
  129. //
  130. //
  131. // main proc.
  132. //
  133. //
  134. int dvd_main(void)
  135. {   
  136.     #ifdef PORTABLE_POWER_ON_MUTE
  137.     regs0->sft_cfg3 &=~((0x01<<6));//CHENZZ FOR LRCK=0.for power on noise
  138.     #endif
  139.     #ifdef SUPPORT_MIDI //Jeff 20040420
  140.     if ( chipid_check_midi() == 0)
  141.     {
  142.         volatile int *buf;
  143.         buf = (volatile int *)(0xBFFE8008);
  144.         *buf = -1;
  145.     }
  146.     #endif
  147. #ifdef PULIANG_DVD  //yaowh add 04-12-17
  148.     regs0->gpio_master[35 / 16] |= (0x1 << (35 % 16));
  149. GPIO_E_SET(35,1);
  150.     GPIO_O_SET(35,1);
  151. #endif
  152. #if defined(SUPPORT_AUDIO_RESET)&&defined(HANYANG_4340_AUDRESET)
  153.      regs0->sft_cfg3 &= ~(0x1 << 4);
  154.     regs0->gpio_master[60 / 16] |= (0x01 << (60 % 16));
  155.     regs0->gpio_oe[60 / 16] |= (0x01 << (60 % 16));
  156.     regs0->gpio_out[60 / 16] |= (0x01 << (60 % 16));
  157.     delay_srv_10ms(30);
  158. #endif    
  159.     
  160.     #ifdef SUPPORT_SPI
  161.     regs0->sft_cfg0 &= ~(0x3fff << 1); //pin 129~131, pin 133~136 is GPIO  
  162.     regs0->gpio_master[SPI_DATAIN / 16] |= (0x1 << (SPI_DATAIN % 16));
  163.     regs0->gpio_oe[SPI_DATAIN / 16] |= (0x1 << (SPI_DATAIN % 16));
  164.     regs0->gpio_out[SPI_DATAIN / 16] |= (0x1 << (SPI_DATAIN % 16));  
  165.     #endif  
  166.     
  167.     //
  168.     //
  169. #ifdef ROM_SDRAM_SHARE_BUS    
  170.     regs0->sdctrl_gclk_dis = 8 << 8;
  171.     regs0->stamp = 0x01;
  172. #endif
  173.     
  174.     pDSV = &(share_data.DSV);  
  175. //    pFsJpeg.cdg = &(share_data.VCD);  
  176. //#ifdef SHARE_NAV_VAR      
  177.     pFsJpeg = &(share_data.JPEG);  
  178. //#endif  
  179.     //#if defined(SUPPORT_CARD_STORAGE)||defined(SUPPORT_USB)||defined(SPHE8202_CARD_STORAGE)
  180.     #if defined(SUPPORT_CARD_STORAGE)//liweihua mod 20040324
  181.     media_type = MEDIA_CARD;
  182.     #endif
  183.     //
  184.     // setup FPGA-emulation system related controls.
  185. #ifdef EMULATION
  186.     setup_emu();
  187. #endif
  188. #ifdef STBY_CONTROLLER_IO_61PIN_12GPIO
  189. GPIO_M_SET(12,1);   //pin 61 gpio 12 s-by
  190. GPIO_E_SET(12,1);   //pin 61 gpio 12 s-by
  191.        GPIO_O_SET(12,1);   //pin 61 gpio 12 s-by
  192. #endif
  193.     //
  194.     // initialize system hardware.
  195.     reset_all();
  196. #ifdef DVI_I2C_SET
  197. #ifdef SPHE8202
  198. //  i2c_init_io_risc();
  199. #else
  200.     // select GPIO 0,1 for mips I2C tjf 04-04-29
  201.     regs0->gpio_master[0]|=0x3; //gpio 0,1 for risc
  202.     regs0->gpio_oe[0]|=0x03;
  203. #endif
  204. #endif
  205. #ifdef RESET_TO_DVI311//tjf 04-05-06
  206. #ifdef SPHE8202
  207.     regs0->sft_cfg3 &= (~(0x01<<7));
  208.     regs0->sft_cfg8 &= (~(0x03<<8));
  209.     regs0->sft_cfg3 &= (~(0x01<<4));
  210.     //regs0->sft_cfg8 &= (~(0x03<<8));
  211.    
  212. #else
  213. #define RESET_DVI311_GPIO 40
  214. //  regs0->gpio_master[2]|=(1<<8);
  215. //  regs0->gpio_oe[2]|=(1<<8);
  216.     //GPIO_M_SET(RESET_DVI311_GPIO, 1); //dvi311_reset is gpio 37,pin129
  217.     //GPIO_E_SET(RESET_DVI311_GPIO, 1);
  218. //  GPIO_O_SET(RESET_DVI311_GPIO, 1);
  219.     GPIO_O_SET(RESET_DVI311_GPIO, 1);
  220.     delay_1ms(200);
  221.     delay_1ms(200);
  222.     GPIO_O_SET(RESET_DVI311_GPIO, 0);
  223. #endif
  224. #endif
  225.     //
  226.     // MUTE
  227.     GPIO_MUTE();//terry 20030805
  228.     //
  229.     // enable ROM-bus shared ATAPI-interface
  230.     atapi_share_rom_bus();
  231. #ifdef OSD_FONT_COMPRESS  
  232.     //
  233.     // decompress osd font
  234.     if (font_decompress()<0) {
  235.         printf("***ERROR*** font de_compress fail!!nn");
  236.         delay(1000);
  237.     }
  238. #endif
  239. #ifdef SUPPORT_FONT_UTIL
  240.     SetCurrentFont( 0 );    // 2004/09/19 yltseng
  241. #endif
  242.     //
  243.     // write-out copyright
  244.     sysmain_boot_message();
  245.     //
  246.     // set/load setup
  247.     sysmain_load_setup();
  248.     //
  249.     // initialize variables
  250.     InitVar();
  251.     #ifdef SUPPORT_FUNCTION_MENU
  252.     #ifdef SUPPORT_SPI
  253.     pdvd_mode = PDVD_MODE;
  254.     #endif
  255.     #endif
  256.     
  257.     //
  258.     // setup hardware (in additional to reset_all())
  259. #ifdef EASTWIN
  260.     check_customer_default();
  261.     init_lcd_display_mode();
  262. #endif
  263.     sysmain_setup_hardware();
  264. #ifdef  ERROR_CONCEALMENT
  265.     setup_error_mb_limit(ERROR_MB_LIMIT_NUM);        // ERROR_MB_LIMIT_NUM*16 MB default=4 
  266.     setup_error_concealment(ERROR_CONCEALMENT_MODE);  // detect error and skip
  267. #endif
  268. #ifdef  EMU_MODE  
  269.     UserSet.ParentalLvl=8;
  270. #endif
  271. #ifdef SPHE1000 //MIKEY 2004.07.15
  272.     read_profile();
  273.     #endif
  274.     //
  275.     // run tests if required
  276.     run_tests();
  277. #ifdef DVD_SERVO
  278.     //
  279.     // Initialize different types of loader OPU
  280.     system_init_servo_var();
  281. #endif
  282.     counter_down = 5;//terry,2003/8/11 11:42AM,move here
  283.     //
  284.     // first time display DVD player title
  285. #ifndef SLEEP_WHEN_POWER_ON   
  286.     #ifdef QSI_PORTABLE_DVD
  287.                 //psprintf(RegionValStr[1],"CVBS_SVideo ON");
  288.                 //PrintOsdMsg(72,1,1,1);
  289.                 sp8200tv_setup_custom_output(TV_OUT_CScCSc);
  290.                 tv_dacoff(TV_DAC_A|TV_DAC_E|TV_DAC_F);
  291.     #endif
  292.        
  293.     ShowTitle(); 
  294. #endif//#ifndef SLEEP_WHEN_POWER_ON   
  295. #ifdef SUPPORT_I2C_LCD_Panel
  296.     init_I2C_panel();
  297. #endif
  298.    
  299. #if defined(SPHE1000) && !defined(DVB1000_NON_OS)
  300.     boot_linux(); //MIKEY 2004.04.15
  301. #endif
  302.     //
  303.     // servo/hdd/atapi/avb/cf card init...  
  304.     //srv_on =1;//terry 3-8-8 4:17 move it behind ShowTitle(); 
  305.     servo_test();  
  306.     //
  307.     // initialize hd
  308.     //hdd_init();
  309.     //
  310.     // initialize atapi(main)
  311. #ifndef SP1000_NO_DVD
  312.     #ifndef SETUP_ATAPI_EPP
  313.         #if defined(SPHE1000) && !defined(DVB1000_NON_OS)
  314.             if(f_drv_init==1) {  //MIKEY
  315.                 drv_init();
  316.             }
  317.         #else
  318.             drv_init();
  319.         #endif
  320.     #endif //#ifndef SETUP_ATAPI_EPP
  321. #endif //#ifndef SP1000_NO_DVD
  322.     #ifdef SUPPORT_USB//liweihua 2003-9-25
  323.       #ifdef HOST_UHCI  //wthsin, 2004/1/12 02:09pm
  324.         regs0->reset2 &= 0xEFFF;  //wthsin, Enable UHCI register R/W access
  325.         extern UINT16 uhci_usb_driver;
  326.         #ifdef IC_8202E
  327.          uhci_usb_driver=0x6f1f;
  328.         #else
  329.          uhci_usb_driver=0x3e3e;
  330.         #endif
  331.         uhci_reset();   
  332.         card_plug_state = USER_DO_PLUG_OUT; 
  333.       #else
  334.         sl811h_init();
  335.       #endif  
  336.     #endif
  337.     #ifdef SUPPORT_CARD_STORAGE
  338.         #ifdef SUPPORT_HDD_ACCESS
  339.             load_hdd_init();
  340.         #endif
  341.         CardReset();
  342.     #endif
  343. #ifdef AD_TCL//2004-3-31 14:24 lijd
  344.     #ifdef SLEEP_WHEN_POWER_ON
  345.     {
  346.         volatile int *iMagic=(int *)(DATA_RAM_BASE|0x80);
  347.         if (*iMagic != 0x1234abcd) 
  348.         {
  349.             #ifdef TCL_STANDBY
  350.                          regs0->gpio_master[4 / 16] |= (0x1 << (4 % 16));
  351.                          regs0->gpio_oe[ 4/16 ] |= (0x1 << (4%16));//output
  352.                          regs0->gpio_out[4/16 ] |= (0x1 << (4%16));
  353.                      ircmd_power();
  354.             #else
  355.             #if defined(POWER_RESUME)&&defined(SLEEP_WHEN_POWER_ON)
  356.             ircmd_power();
  357.             #endif
  358.           
  359.             #endif
  360.         }
  361.          else
  362.          {
  363.             #ifdef TCL_STANDBY
  364.                          regs0->gpio_master[4 / 16] |= (0x1 << (4 % 16));
  365.                          regs0->gpio_oe[ 4/16 ] |= (0x1 << (4%16));//output
  366.                          regs0->gpio_out[ 4/16 ] &= ~(0x1 << (4%16));
  367.             #endif
  368.          }
  369.         *iMagic = 0;
  370. //yanlb move it here;04/05/12 PM 10:15
  371.         tv_dacoff(0);                   // dac f/e/d/c/b/a on    
  372.         ShowTitle();
  373.     }
  374.     #endif
  375. #else
  376.     #ifndef AFTER_UPGRADE_TRAYOUT
  377.     sleep_when_power_on();
  378.     #else
  379.         //tray out after updata,fist time don't sleep .move from sysmain2.c
  380.         #if defined( RESET_AFTER_UPGRADE ) || defined( RISC_ALIVE_STANDBY )    // 2004/10/01 yltseng
  381.         {
  382.             volatile int *iMagic = (int *)(DATA_RAM_BASE|0x80);
  383.             if (*iMagic == 0x1881)ircmd_trayout();
  384.             else sleep_when_power_on();
  385.             *iMagic = 0;
  386.         }    
  387.         #endif
  388.     #endif
  389. #endif
  390.            
  391. //yanlb move it to sleep_when_power_on();04/05/12 PM 2:00
  392. //#ifdef SLEEP_WHEN_POWER_ON                //hq,3-11-25 22:36
  393. //    tv_dacoff(0);                   // dac f/e/d/c/b/a on    
  394. //    ShowTitle();  
  395. //#endif  
  396.     srv_on =1;//terry 3-8-8 4:17
  397.     
  398. #ifndef DVDRELEASE
  399.     disable_uop = 0;
  400. #endif
  401. #ifdef HDMI
  402. ResetAuthentStates();
  403. #endif
  404.     // jump to AP
  405.     while (1)
  406.     {
  407.         // benson move call ap_main_receiver() 2004/3/1 03:35