1217044Snwhitehorn/*
2217044Snwhitehorn * Playstation 3 LV1 hypercall interface
3217044Snwhitehorn *
4217044Snwhitehorn * $FreeBSD: releng/10.3/sys/powerpc/ps3/ps3-hvcall.master 228689 2011-12-18 16:53:21Z nwhitehorn $
5217044Snwhitehorn */
6217044Snwhitehorn
7217044Snwhitehorn#include <sys/types.h>
8217044Snwhitehorn
9217044Snwhitehornenum lpar_id {
10217044Snwhitehorn	PS3_LPAR_ID_CURRENT	= 0x00,
11217044Snwhitehorn	PS3_LPAR_ID_PME		= 0x01,
12217044Snwhitehorn};
13217044Snwhitehorn
14223460Snwhitehorn/* Return codes from hypercalls */
15223460Snwhitehorn#define LV1_SUCCESS			0
16223460Snwhitehorn#define LV1_RESOURCE_SHORTAGE		-2
17223460Snwhitehorn#define LV1_NO_PRIVILEGE		-3
18223460Snwhitehorn#define LV1_DENIED_BY_POLICY		-4
19223460Snwhitehorn#define LV1_ACCESS_VIOLATION		-5
20223460Snwhitehorn#define LV1_NO_ENTRY			-6
21223460Snwhitehorn#define LV1_DUPLICATE_ENTRY		-7
22223460Snwhitehorn#define LV1_TYPE_MISMATCH		-8
23223460Snwhitehorn#define LV1_BUSY			-9
24223460Snwhitehorn#define LV1_EMPTY			-10
25223460Snwhitehorn#define LV1_WRONG_STATE			-11
26223460Snwhitehorn#define LV1_NO_MATCH			-13
27223460Snwhitehorn#define LV1_ALREADY_CONNECTED		-14
28223460Snwhitehorn#define LV1_UNSUPPORTED_PARAMETER_VALUE	-15
29223460Snwhitehorn#define LV1_CONDITION_NOT_SATISFIED	-16
30223460Snwhitehorn#define LV1_ILLEGAL_PARAMETER_VALUE	-17
31223460Snwhitehorn#define LV1_BAD_OPTION			-18
32223460Snwhitehorn#define LV1_IMPLEMENTATION_LIMITATION	-19
33223460Snwhitehorn#define LV1_NOT_IMPLEMENTED		-20
34223460Snwhitehorn#define LV1_INVALID_CLASS_ID		-21
35223460Snwhitehorn#define LV1_CONSTRAINT_NOT_SATISFIED	-22
36223460Snwhitehorn#define LV1_ALIGNMENT_ERROR		-23
37223460Snwhitehorn#define LV1_HARDWARE_ERROR		-24
38223460Snwhitehorn#define LV1_INVALID_DATA_FORMAT		-25
39223460Snwhitehorn#define LV1_INVALID_OPERATION		-26
40223460Snwhitehorn#define LV1_INTERNAL_ERROR		-32768
41223460Snwhitehorn
42217044Snwhitehornstatic inline uint64_t
43217044Snwhitehornlv1_repository_string(const char *str)
44217044Snwhitehorn{
45217044Snwhitehorn	uint64_t ret = 0;
46217044Snwhitehorn	strncpy((char *)&ret, str, sizeof(ret));
47217044Snwhitehorn	return (ret);
48217044Snwhitehorn}
49217044Snwhitehorn
50217044Snwhitehorn#	Code	Name					Inputs				Outputs
51217044SnwhitehornHVCALL	0	lv1_allocate_memory			size,log_page_size,zero,flags	base_addr,muid
52217044SnwhitehornHVCALL	1	lv1_write_htab_entry			vas_id,slot,pte_hi,pte_lo
53217044SnwhitehornHVCALL	2	lv1_construct_virtual_address_space	log_pteg_count,n_sizes,page_sizes vas_id,hv_pteg_count
54217044SnwhitehornHVCALL	4	lv1_get_virtual_address_space_id_of_ppe	ppe_id				vas_id
55217044SnwhitehornHVCALL	6	lv1_query_logical_partition_address_region_info	lpar_id			base_addr,size,access_right,max_page_size,flags
56217044SnwhitehornHVCALL	7	lv1_select_virtual_address_space	vas_id
57217044SnwhitehornHVCALL	9	lv1_pause				mode
58217044SnwhitehornHVCALL	10	lv1_destruct_virtual_address_space	vas_id
59217044SnwhitehornHVCALL	11	lv1_configure_irq_state_bitmap		ppe_id,cpu_id,bitmap_addr
60217044SnwhitehornHVCALL	12	lv1_connect_irq_plug_ext		ppe_id,cpu_id,virq,outlet,zero
61217044SnwhitehornHVCALL	13	lv1_release_memory			base_addr
62217044SnwhitehornHVCALL	15	lv1_put_iopte				ioas_id,ioif_addr,lpar_addr,io_id,flags
63217044SnwhitehornHVCALL	17	lv1_disconnect_irq_plug_ext		ppe_id,cpu_id,virq
64217044SnwhitehornHVCALL	18	lv1_construct_event_receive_port	UNUSED				outlet
65217044SnwhitehornHVCALL	19	lv1_destruct_event_receive_port		outlet
66217044SnwhitehornHVCALL	24	lv1_send_event_locally			outlet
67217044SnwhitehornHVCALL	27	lv1_end_of_interrupt			irq
68217044SnwhitehornHVCALL	28	lv1_connect_irq_plug			virq,irq
69217044SnwhitehornHVCALL	29	lv1_disconnect_irq_plus			virq
70217044SnwhitehornHVCALL	30	lv1_end_of_interrupt_ext		ppe_id,cpu_id,virq
71217044SnwhitehornHVCALL	31	lv1_did_update_interrupt_mask		ppe_id,cpu_id
72217044SnwhitehornHVCALL	44	lv1_shutdown_logical_partition		cmd
73217044SnwhitehornHVCALL	54	lv1_destruct_logical_spe		spe_id
74217044SnwhitehornHVCALL	57	lv1_construct_logical_spe		pshift1,pshift2,pshift3,pshift4,pshift5,vas_id,spe_type	priv2_addr,problem_phys,local_store_phys,unused,shadow_addr,spe_id
75217044SnwhitehornHVCALL	61	lv1_set_spe_interrupt_mask		spe_id,class,mask
76217044SnwhitehornHVCALL	65	lv1_disable_logical_spe			spe_id,zero
77217044SnwhitehornHVCALL	66	lv1_clear_spe_interrupt_status		spe_id,class,stat,zero
78217044SnwhitehornHVCALL	67	lv1_get_spe_interrupt_status		spe_id,class			stat
79217044SnwhitehornHVCALL	69	lv1_get_logical_ppe_id			UNUSED				ppe_id
80217044SnwhitehornHVCALL	74	lv1_get_logical_partition_id		UNUSED				lpar_id
81217044SnwhitehornHVCALL	78	lv1_get_spe_irq_outlet			spe_id,class			outlet
82217044SnwhitehornHVCALL	79	lv1_set_spe_privilege_state_area_1_register	spe_id,offset,value
83217044SnwhitehornHVCALL	91	lv1_get_repository_node_value		lpar_id,n1,n2,n3,n4		v1,v2
84217044SnwhitehornHVCALL	95	lv1_read_htab_entries			vas_id,slot	hi1,hi2,hi3,hi4,rcbits
85217044SnwhitehornHVCALL	96	lv1_set_dabr				dabr,flags
86217044SnwhitehornHVCALL	116	lv1_allocate_io_segment			ioas_id,seg_size,io_pagesize	ioif_addr
87217044SnwhitehornHVCALL	117	lv1_release_io_segment			ioas_id,ioif_addr
88217044SnwhitehornHVCALL	120	lv1_construct_io_irq_outlet		interrupt_id			outlet
89217044SnwhitehornHVCALL	121	lv1_destruct_io_irq_outlet		outlet
90217044SnwhitehornHVCALL	122	lv1_map_htab				lpar_id				htab_addr
91217044SnwhitehornHVCALL	123	lv1_unmap_htab				htab_addr
92217044SnwhitehornHVCALL	127	lv1_get_version_info			UNUSED				firm_vers
93217044SnwhitehornHVCALL	158	lv1_insert_htab_entry			vas_id,pteg,pte_hi,pte_lo,lockflags,flags	index,evicted_hi,evicted_lo
94217044SnwhitehornHVCALL	162	lv1_read_virtual_uart			port,buffer,bytes		bytes_read
95217044SnwhitehornHVCALL	163	lv1_write_virtual_uart			port,buffer,bytes		bytes_written
96217044SnwhitehornHVCALL	164	lv1_set_virtual_uart_param		port,param,value
97217044SnwhitehornHVCALL	165	lv1_get_virtual_uart_param		port,param			value
98217044SnwhitehornHVCALL	166	lv1_configure_virtual_uart		lpar_addr			outlet
99217044SnwhitehornHVCALL	170	lv1_open_device				bus,dev,zero
100217044SnwhitehornHVCALL	171	lv1_close_device			bus,dev
101217044SnwhitehornHVCALL	172	lv1_map_device_mmio_region		bus,dev,bus_addr,size,page_size	lpar_addr
102217044SnwhitehornHVCALL	173	lv1_unmap_device_mmio_region		bus,dev,lpar_addr
103217044SnwhitehornHVCALL	174	lv1_allocate_device_dma_region		bus,dev,io_size,io_pagesize,flag	dma_region
104217044SnwhitehornHVCALL	175	lv1_free_device_dma_region		bus,dev,dma_region
105217044SnwhitehornHVCALL	176	lv1_map_device_dma_region		bus,dev,lpar_addr,dma_region,size,flags
106217044SnwhitehornHVCALL	177	lv1_unmap_device_dma_region		bus,dev,dma_region,size
107217044SnwhitehornHVCALL	178	lv1_read_pci_config			ps3bus,bus,dev,func,offset,size	result
108217044SnwhitehornHVCALL	179	lv1_write_pci_config			ps3bus,bus,dev,func,offset,size,data
109217044SnwhitehornHVCALL	185	lv1_net_add_multicast_address		bus,dev,addr,flags
110217044SnwhitehornHVCALL	186	lv1_net_remove_multicast_address	bus,dev,zero,one
111217044SnwhitehornHVCALL	187	lv1_net_start_tx_dma			bus,dev,bus_addr,zero
112217044SnwhitehornHVCALL	188	lv1_net_stop_tx_dma			bus,dev,zero
113217044SnwhitehornHVCALL	189	lv1_net_start_rx_dma			bus,dev,bus_addr,zero
114217044SnwhitehornHVCALL	190	lv1_net_stop_rx_dma			bus,dev,zero
115217044SnwhitehornHVCALL	191	lv1_net_set_interrupt_status_indicator	bus,dev,irq_status_addr,zero
116217044SnwhitehornHVCALL	193	lv1_net_set_interrupt_mask		bus,dev,mask,zero
117217044SnwhitehornHVCALL	194	lv1_net_control				bus,dev,p1,p2,p3,p4		v1,v2
118217044SnwhitehornHVCALL	197	lv1_connect_interrupt_event_receive_port	bus,dev,outlet,irq
119217044SnwhitehornHVCALL	198	lv1_disconnect_interrupt_event_receive_port	bus,dev,outlet,irq
120217044SnwhitehornHVCALL	202	lv1_deconfigure_virtual_uart_irq
121217044SnwhitehornHVCALL	207	lv1_enable_logical_spe			spe_id,resource_id
122217044SnwhitehornHVCALL	210	lv1_gpu_open				zero
123217044SnwhitehornHVCALL	211	lv1_gpu_close
124217044SnwhitehornHVCALL	212	lv1_gpu_device_map			dev				lpar_addr,lpar_size
125217044SnwhitehornHVCALL	213	lv1_gpu_device_unmap			dev
126217044SnwhitehornHVCALL	214	lv1_gpu_memory_allocate			ddr_size,zero1,zero2,zero3,zero4	handle,ddr_lpar
127217044SnwhitehornHVCALL	216	lv1_gpu_memory_free			handle
128228689SnwhitehornHVCALL	217	lv1_gpu_context_allocate		handle,flags			chandle,lpar_dma_control,lpar_driver_info,lpar_reports,lpar_reports_size
129217044SnwhitehornHVCALL	218	lv1_gpu_context_free			chandle
130217044SnwhitehornHVCALL	221	lv1_gpu_context_iomap			changle,gpu_ioif,xdr_lpar,fbsize,ioflags
131217044SnwhitehornHVCALL	225	lv1_gpu_context_attribute		chandle,op,p1,p2,p3,p4
132217044SnwhitehornHVCALL	227	lv1_gpu_context_intr			chandle				v1
133228689SnwhitehornHVCALL	228	lv1_gpu_attribute			p1,p2,p3,p4,p5
134217044SnwhitehornHVCALL	232	lv1_get_rtc				UNUSED				rtc_val,timebase
135217044SnwhitehornHVCALL	245	lv1_storage_read			dev,region,sector,nsectors,flags,buf	dma_tag
136217044SnwhitehornHVCALL	246	lv1_storage_write			dev,region,sector,nsectors,flags,buf	dma_tag
137217044SnwhitehornHVCALL	248	lv1_storage_send_device_command		dev,cmd_id,cmd_block,cmd_size,data_buf,blocks	dma_tag
138217044SnwhitehornHVCALL	249	lv1_storage_get_async_status		dev				dma_tag,status
139217044SnwhitehornHVCALL	254	lv1_storage_check_async_status		dev,dma_tag			status
140217044SnwhitehornHVCALL	255	lv1_panic				howto
141