#!/usr/bin/python # Copyright (c) 2015 Dell Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 # # THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR # CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT # LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS # FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. # # See the Apache Version 2.0 License for specific language governing # permissions and limitations under the License. import struct import sys import getopt from os import * from mmap import * def usage(): ''' This is the Usage Method ''' print '\t\t pcisysfs.py --get --offset --res ' print '\t\t pcisysfs.py --set --val --offset --res ' sys.exit(1) def pci_mem_read(mm,offset): mm.seek(offset) read_data_stream=mm.read(4) print "" reg_val=struct.unpack('I',read_data_stream) print "reg_val read:%x"%reg_val return reg_val def pci_mem_write(mm,offset,data): mm.seek(offset) print "data to write:%x"%data mm.write(struct.pack('I',data)) def pci_set_value(resource,val,offset): fd=open(resource,O_RDWR) mm=mmap(fd,0) pci_mem_write(mm,offset,val) def pci_get_value(resource,offset): fd=open(resource,O_RDWR) mm=mmap(fd,0) pci_mem_read(mm,offset) def main(argv): ''' The main function will read the user input from the command line argument and process the request ''' opts = '' val = '' choice = '' resource = '' offset = '' try: opts, args = getopt.getopt(argv, "hgsv:" , \ ["val=","res=","offset=","help", "get", "set"]) except getopt.GetoptError: usage() for opt,arg in opts: if opt in ('-h','--help'): choice = 'help' elif opt in ('-g', '--get'): choice = 'get' elif opt in ('-s', '--set'): choice = 'set' elif opt == '--res': resource = arg elif opt == '--val': val = int(arg,16) elif opt == '--offset': offset = int(arg,16) if choice == 'set' and val != '' and offset !='' and resource !='': pci_set_value(resource,val,offset) elif choice == 'get' and offset != '' and resource !='': pci_get_value(resource,offset) else: usage() #Calling the main method if __name__ == "__main__": main(sys.argv[1:])