probe.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Platform dependent support for IO probing.
  3.  *
  4.  * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All rights reserved.
  5.  * 
  6.  * This program is free software; you can redistribute it and/or modify it 
  7.  * under the terms of version 2 of the GNU General Public License 
  8.  * as published by the Free Software Foundation.
  9.  * 
  10.  * This program is distributed in the hope that it would be useful, but 
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of 
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
  13.  * 
  14.  * Further, this software is distributed without any warranty that it is 
  15.  * free of the rightful claim of any third person regarding infringement 
  16.  * or the like.  Any license provided herein, whether implied or 
  17.  * otherwise, applies only to this software file.  Patent licenses, if 
  18.  * any, provided herein do not apply to combinations of this program with 
  19.  * other software, or any other product whatsoever.
  20.  * 
  21.  * You should have received a copy of the GNU General Public 
  22.  * License along with this program; if not, write the Free Software 
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  24.  * 
  25.  * Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 
  26.  * Mountain View, CA  94043, or:
  27.  * 
  28.  * http://www.sgi.com 
  29.  * 
  30.  * For further information regarding this notice, see: 
  31.  * 
  32.  * http://oss.sgi.com/projects/GenInfo/NoticeExplan
  33.  */
  34. #include <asm/sn/sn_sal.h>
  35. /**
  36.  * ia64_sn_probe_io_slot - test a memory location for readability
  37.  * @paddr: physical address to probe
  38.  * @size: number bytes to read (1,2,4,8)
  39.  * @data_ptr: address to store value read by probe (-1 returned if probe fails)
  40.  *
  41.  * This function will probe a physical address to determine if
  42.  * the address can be read. If reading the address causes a BUS
  43.  * error, an error is returned. If the probe succeeds, the contents 
  44.  * of the memory location is returned.
  45.  *
  46.  * Return values:
  47.  *  0 - probe successful
  48.  *  1 - probe failed (generated MCA)
  49.  *  2 - Bad arg
  50.  * <0 - PAL error
  51.  */
  52. u64
  53. ia64_sn_probe_io_slot(long paddr, long size, void *data_ptr)
  54. {
  55. struct ia64_sal_retval isrv;
  56. SAL_CALL(isrv, SN_SAL_PROBE, paddr, size, 0, 0, 0, 0, 0);
  57. if (data_ptr) {
  58. switch (size) {
  59. case 1:
  60. *((u8*)data_ptr) = (u8)isrv.v0;
  61. break;
  62. case 2:
  63. *((u16*)data_ptr) = (u16)isrv.v0;
  64. break;
  65. case 4:
  66. *((u32*)data_ptr) = (u32)isrv.v0;
  67. break;
  68. case 8:
  69. *((u64*)data_ptr) = (u64)isrv.v0;
  70. break;
  71. default:
  72. isrv.status = 2;
  73. }
  74. }
  75. return isrv.status;
  76. }