diff options
| author | Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> | 2008-10-30 04:12:58 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2008-11-19 00:03:54 -0500 |
| commit | 9b82f3e61758ed897200f0244b63a77c1791bcba (patch) | |
| tree | ed1a41b22151fabf4e096ca6b4bee8f1931599c7 /drivers/ps3 | |
| parent | 486936cd93e99c802153b3f2f629c5ce62b8c0d4 (diff) | |
powerpc/ps3: Replace the flip_ctl logic in ps3av and ps3fb by a mutex
Introduce ps3_gpu_mutex to synchronizes GPU-related operations, like:
- invoking the L1GPU_CONTEXT_ATTRIBUTE_FB_BLIT command using the
lv1_gpu_context_attribute() hypervisor call,
- handling the PS3AV_CID_AVB_PARAM packet in the PS3 A/V Settings driver.
Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'drivers/ps3')
| -rw-r--r-- | drivers/ps3/ps3av.c | 20 | ||||
| -rw-r--r-- | drivers/ps3/ps3av_cmd.c | 4 |
2 files changed, 2 insertions, 22 deletions
diff --git a/drivers/ps3/ps3av.c b/drivers/ps3/ps3av.c index 06848b254d57..5324978b73fb 100644 --- a/drivers/ps3/ps3av.c +++ b/drivers/ps3/ps3av.c | |||
| @@ -59,8 +59,6 @@ static struct ps3av { | |||
| 59 | struct ps3av_reply_hdr reply_hdr; | 59 | struct ps3av_reply_hdr reply_hdr; |
| 60 | u8 raw[PS3AV_BUF_SIZE]; | 60 | u8 raw[PS3AV_BUF_SIZE]; |
| 61 | } recv_buf; | 61 | } recv_buf; |
| 62 | void (*flip_ctl)(int on, void *data); | ||
| 63 | void *flip_data; | ||
| 64 | } *ps3av; | 62 | } *ps3av; |
| 65 | 63 | ||
| 66 | /* color space */ | 64 | /* color space */ |
| @@ -939,24 +937,6 @@ int ps3av_audio_mute(int mute) | |||
| 939 | 937 | ||
| 940 | EXPORT_SYMBOL_GPL(ps3av_audio_mute); | 938 | EXPORT_SYMBOL_GPL(ps3av_audio_mute); |
| 941 | 939 | ||
| 942 | void ps3av_register_flip_ctl(void (*flip_ctl)(int on, void *data), | ||
| 943 | void *flip_data) | ||
| 944 | { | ||
| 945 | mutex_lock(&ps3av->mutex); | ||
| 946 | ps3av->flip_ctl = flip_ctl; | ||
| 947 | ps3av->flip_data = flip_data; | ||
| 948 | mutex_unlock(&ps3av->mutex); | ||
| 949 | } | ||
| 950 | EXPORT_SYMBOL_GPL(ps3av_register_flip_ctl); | ||
| 951 | |||
| 952 | void ps3av_flip_ctl(int on) | ||
| 953 | { | ||
| 954 | mutex_lock(&ps3av->mutex); | ||
| 955 | if (ps3av->flip_ctl) | ||
| 956 | ps3av->flip_ctl(on, ps3av->flip_data); | ||
| 957 | mutex_unlock(&ps3av->mutex); | ||
| 958 | } | ||
| 959 | |||
| 960 | static int ps3av_probe(struct ps3_system_bus_device *dev) | 940 | static int ps3av_probe(struct ps3_system_bus_device *dev) |
| 961 | { | 941 | { |
| 962 | int res; | 942 | int res; |
diff --git a/drivers/ps3/ps3av_cmd.c b/drivers/ps3/ps3av_cmd.c index 11eb50318fec..716596e8e5b0 100644 --- a/drivers/ps3/ps3av_cmd.c +++ b/drivers/ps3/ps3av_cmd.c | |||
| @@ -864,7 +864,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len) | |||
| 864 | { | 864 | { |
| 865 | int res; | 865 | int res; |
| 866 | 866 | ||
| 867 | ps3av_flip_ctl(0); /* flip off */ | 867 | mutex_lock(&ps3_gpu_mutex); |
| 868 | 868 | ||
| 869 | /* avb packet */ | 869 | /* avb packet */ |
| 870 | res = ps3av_do_pkt(PS3AV_CID_AVB_PARAM, send_len, sizeof(*avb), | 870 | res = ps3av_do_pkt(PS3AV_CID_AVB_PARAM, send_len, sizeof(*avb), |
| @@ -878,7 +878,7 @@ int ps3av_cmd_avb_param(struct ps3av_pkt_avb_param *avb, u32 send_len) | |||
| 878 | res); | 878 | res); |
| 879 | 879 | ||
| 880 | out: | 880 | out: |
| 881 | ps3av_flip_ctl(1); /* flip on */ | 881 | mutex_unlock(&ps3_gpu_mutex); |
| 882 | return res; | 882 | return res; |
| 883 | } | 883 | } |
| 884 | 884 | ||
